[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]如何制作当前视图状态的“快照”的主要内容,如果未能解决你的问题,请参考以下文章

在 ios7 中拍摄状态栏的快照

如何判断视图的视图控制器是不是在 iOS7 的状态栏下方扩展

iOS 在进入后台时拍摄视图快照的确切时间?

当视图在iOS中加载时如何在缩放时显示用户当前位置?

集合视图设计布局 Ios

空间数据库原理A04_CentOS虚拟机快照使用