开发的时候我们会遇到截屏的功能,这里介绍一个简单的把UIView转化为UIImage的功能以此实现简单的截屏功能:
我们为UIIView做一个扩展:
Swift:
//将当前视图转为UIImage
func asImage() -> UIImage {
if #available(iOS 10.0, *) {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
} else {
guard bounds.size.height > 0 && bounds.size.width > 0 else {
return nil
}
UIGraphicsBeginImageContextWithOptions(CGSize(width: bounds.width, height: bounds.height), false, 0)
// 之前解决不了的模糊问题就是出在这个方法上
// layer.render(in: UIGraphicsGetCurrentContext()!)
self.drawHierarchy(in: self.frame, afterScreenUpdates: true) // 高清截图
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
OC:
- (UIImage*) imageWithUIView:(UIView*) view{
// 创建一个bitmap的context
// 并把它设置成为当前正在使用的context
// UIGraphicsBeginImageContext(view.bounds.size); 或
UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.width, view.frame.size.height), NO, 0.0)
CGContextRef currnetContext = UIGraphicsGetCurrentContext();
[view.layer renderInContext:currnetContext];
CGContextRestoreGState(context);
// 从当前context中创建一个改变大小后的图片
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
// 使当前的context出堆栈
UIGraphicsEndImageContext();
return image;
}