iOS 7에는 현재 그래픽 컨텍스트에 뷰 계층을 그릴 수있는 새로운 방법이 있습니다. UIImage를 매우 빠르게 얻는 데 사용할 수 있습니다.
UIView
뷰를 다음과 같이 얻기 위해 카테고리 메소드를 구현 했습니다 UIImage
.
- (UIImage *)pb_takeSnapshot {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [UIScreen mainScreen].scale);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
// old style [self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
기존 renderInContext:
방법 보다 훨씬 빠릅니다 .
참조 : https://developer.apple.com/library/content/qa/qa1817/_index.html
SWIFT 업데이트 : 동일한 기능을 수행하는 확장 프로그램 :
extension UIView {
func pb_takeSnapshot() -> UIImage {
UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale)
drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
// old style: layer.renderInContext(UIGraphicsGetCurrentContext())
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
스위프트 3 업데이트
UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)
drawHierarchy(in: self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image