iOS 7 có một phương pháp mới cho phép bạn vẽ cấu trúc phân cấp chế độ xem vào bối cảnh đồ họa hiện tại. Điều này có thể được sử dụng để có được một UIImage rất nhanh.
Tôi đã triển khai một phương thức thể loại UIView
để có được khung nhìn như UIImage
sau:
- (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;
}
Nó nhanh hơn đáng kể so với renderInContext:
phương thức hiện có .
Tham khảo: https://developer.apple.com/l Library / content / qa / qa1817 / _index.html
CẬP NHẬT CHO SWift : Một tiện ích mở rộng thực hiện tương tự:
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
}
}
CẬP NHẬT CHO SWift 3
UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)
drawHierarchy(in: self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image