正在尝试显示从一个viewController捕获的UIImage,并在iOS中的另一个中显示它
我有一个正在开发的iPad应用程序,从我的主viewController(称为mainViewController)调用并显示另一个viewController(称为nextViewController),它是从.xib文件创建的。第二个viewController允许用户捕获如下图像:正在尝试显示从一个viewController捕获的UIImage,并在iOS中的另一个中显示它,ios,uiviewcontroller,uiimage,xib,Ios,Uiviewcontroller,Uiimage,Xib,我有一个正在开发的iPad应用程序,从我的主viewController(称为mainViewController)调用并显示另一个viewController(称为nextViewController),它是从.xib文件创建的。第二个viewController允许用户捕获如下图像: - (IBAction)imageCapture:(id)sender { _myImage = [_nextView captureImage]; UIImageWriteToSavedPh
- (IBAction)imageCapture:(id)sender {
_myImage = [_nextView captureImage];
UIImageWriteToSavedPhotosAlbum(_myImage, nil, nil, nil);
[self dismissViewControllerAnimated:YES completion:nil];
}
一旦捕获了此图像,我需要将此图像传递回调用的viewController(mainViewController),但老实说,我不确定如何执行此操作。我已尝试在我的nextViewController中创建我的mainViewController的属性引用,我尝试这样做是为了将新获取的图像的引用传递给mainController的属性,但这不起作用
首先,您应该在
secondViewController
中创建一个属性,以便在显示secondViewController之前将您的mainViewController
传递给。例:
_secondViewController.mainViewController = self;
其次,您需要在mainViewController
中使用一个属性将图像从secondViewController
传回。例:
self.mainViewController.capturedImage = _myImage;
希望这将对您有所帮助。要有效地做到这一点,您不应该在显示的视图控制器中创建属性
mainViewController
。这将导致可重用性问题,再加上紧密耦合是不可取的。相反,正如上面的注释所指出的,您应该使用协议。有关Objective-C,请参阅了解协议语法
在NextViewController中,您应该使委托方法如下所示:
-(void)nextViewController:(NextViewController *)nextViewController capturedImage:(UIImage *)image;
然后,在主视图控制器类中,应该实现此方法并对图像执行任何操作。值得注意的是,您可能希望从主视图控制器中关闭控制器。创建下一个视图控制器时,不要忘记设置其委托属性
我希望这能澄清你的问题 您可以通过协议传递此值。你是怎么用protokol的?它在哪方面不起作用?您是否考虑过将其作为代理关系?谢谢您的及时回复。我试图找出如何使用协议来实现这一点,但这对我来说是新的。理论上我知道协议是什么,但在这种情况下,如果可能的话,我需要一个例子。我想我只传递映像,而不是控制器。我会让委托方法返回一个
UIImage
。非常感谢您的快速回复。当我使用您的行进行协议声明时:-(void)nextViewController:(nextViewController*)nextViewController capturedImage:(UIImage*)image;我得到了以下错误:预期类型,关于(NextViewController*)有什么原因吗?是的,我在这种情况下有过这个错误。这意味着您需要将协议部分移过头文件中的@接口,并且需要添加一行@protocol-NextViewControllerDelegate代码>在协议最初所在的位置。这基本上是一个声明问题,这意味着在使用该类时尚未声明该类。@Marcusadam我使用void返回值而不是映像的原因是主视图控制器需要映像,而不是下一个视图控制器。由于协议方法由主控制器运行,因此它不应该传回映像。