[iOS]如何制作当前视图状态的"快照"

Kno*_*del 14 iphone view

我需要制作快照或截图 - 根据需要调用当前视图,然后在模态视图中显示它.

因为如果我只是在ModalView的View控制器中写这个

MyAppViewController *viewController = [[MyAppViewController alloc] init];
self.view = viewController.view;
Run Code Online (Sandbox Code Playgroud)

调用MyAppViewController的所有方法,但我不需要它,我只需要"保存"ModalView出现时屏幕上的所有内容,并在ModalView的视图中显示它.

我该怎么做?提前致谢!

Bon*_*geh 34

我建议这样做:

有一个方法,可以从视图的内容中创建一个图像.

-(UIImage*) makeImage {

UIGraphicsBeginImageContext(self.view.bounds.size);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return viewImage;
}
Run Code Online (Sandbox Code Playgroud)

为你的模态视图创建一个自定义的init方法,并为你的modalView提供一个可以保存UIImage的实例变量......

- (id)initWithImage:(UIImage *)temp {
   myImage = temp;
}
Run Code Online (Sandbox Code Playgroud)

然后在你的modalView中,也许在viewDidLoad方法中,创建一个UIImageView并将图像设置为 myImage

希望这能实现您想要做的事情.

  • 在视网膜显示器上,使用UIGraphicsBeginImageContext创建具有1.0比例因子的上下文,这导致低分辨率图像.使用UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,YES,0.0)自动获得正确的比例因子. (15认同)

g_f*_*red 12

在iOS 7中,您可以使用UIView中的一种新方法来创建快照,例如:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates;
Run Code Online (Sandbox Code Playgroud)

返回一个UIView,然后您可以将其添加为子视图.