[iOS]如何制作当前视图状态的“快照”
Posted
技术标签:
【中文标题】[iOS]如何制作当前视图状态的“快照”【英文标题】:[iOS]How to make a "snapshot" of the current view's state 【发布时间】:2010-09-14 15:00:09 【问题描述】:我需要为当前视图制作快照或屏幕截图 - 随意调用它 - 然后将其显示在模态视图中。
因为如果我只是在 ModalView 的视图控制器中写这个
MyAppViewController *viewController = [[MyAppViewController alloc] init];
self.view = viewController.view;
MyAppViewController 的所有方法也都被调用了,但我不需要它,我只需要“保存”ModalView 出现时屏幕上的所有内容,并将其显示在 ModalView 的视图中。
我该怎么做? 提前致谢!
【问题讨论】:
我不确定这是什么意思:“MyAppViewController 的所有方法都被调用了”。一个对我来说似乎太明显的答案是只用你需要的元素创建一个新类。当然,我对这个问题还不够了解。 我的应用是一个游戏。当用户点击特定按钮时,会出现一个模态视图控制器,它需要在点击按钮之前的状态下显示游戏的视图。所以被杀死的怪物应该已经死了等等。但是如果我使用第一篇文章中的代码,一切看起来就像游戏才刚刚开始 您需要平面图像截图,还是要保存游戏的当前状态。 【参考方案1】:我建议这样做:
有一个方法可以根据视图的内容创建图像。
-(UIImage*) makeImage
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
为您的模态视图创建一个自定义初始化方法,并为您的 modalView 提供一个实例变量,该变量可以保存 UIImage 之类的...
- (id)initWithImage:(UIImage *)temp
myImage = temp;
然后在你的 modalView 中,也许是在 viewDidLoad 方法中,创建一个 UIImageView 并将图像设置为myImage
希望这可以实现您想要做的事情。
【讨论】:
是的!这正是我所需要的!非常感谢! 在视网膜显示器上,使用 UIGraphicsBeginImageContext 创建一个具有 1.0 比例因子的上下文,这会导致图像分辨率低。使用 UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0) 自动获得正确的比例因子。 如果您访问视图层,您需要在文件中的Build Phases
和#import <QuartzCore/QuartzCore.h>
中添加QuartzCore
框架。
重要的是,正如 Imre Kelényi 所说,将 UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0) 用于视网膜。【参考方案2】:
在 ios 7 中,您可以使用 UIView 中的一种新方法来创建快照,例如:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates;
它返回一个 UIView,然后您可以将其添加为子视图。
【讨论】:
【参考方案3】:UIView *viewSnapShop = [self snapshotViewAfterScreenUpdates:NO];
【讨论】:
以上是关于[iOS]如何制作当前视图状态的“快照”的主要内容,如果未能解决你的问题,请参考以下文章