在开发中有时会需要做截屏操作,那么该如何做到截屏呢?
我们先来看一下在iOS 7 之前是如何做的,这也是在经常看到的做法:
|
|
以上就是我经常见到的获取截屏的方法。但是在iOS 7之后通常不是用这种方式。原因是iOS 7之后UIView有新的API drawViewHierarchyInRect:afterScreenUpdates: 。新的API与通过CALayer绘图的差别是,iOS 7 之后的UI设计大量使用半透明毛玻璃效果的view,而使用CALayer截出的图片无法抓到这部分,按苹果的说法,新的API可以抓到无论是UIKit、Quartz、OpenGL ES、SpriteKit 等系统级别产生的画面。
|
|
iOS 7之后除了这个方法之外UIView还提供了另外两个截屏的方法:123- (nullable UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates;- (nullable UIView *)resizableSnapshotViewFromRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates withCapInsets:(UIEdgeInsets)capInsets;
而且UIScreen也提供了一个方法:1- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates;
这三个方法都是直接返回UIView对象,如果你在寻找截屏的view,用这些方法中的一个会更有效。
参考:
1.KKBOX iOS/Mac OS X 基本開發教材
2.官方链接