extension UIView{
//将当前视图转为UIImage
func asImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
}
public func snapshot(rect: CGRect = CGRect.zero, scale: CGFloat = UIScreen.main.scale) -> UIImage? {
var snapRect = rect
if __CGSizeEqualToSize(rect.size, CGSize.zero) {
snapRect = calculateSnapshotRect()
}
UIGraphicsBeginImageContextWithOptions(snapRect.size, false, scale)
defer {
UIGraphicsEndImageContext()
}
let siF = self.drawHierarchy(in: snapRect, afterScreenUpdates: false)
if !siF {
self.drawHierarchy(in: snapRect, afterScreenUpdates: true)
}
print("siF == \(siF)")
return UIGraphicsGetImageFromCurrentImageContext()
}
// 计算UIView所显示内容Rect
func calculateSnapshotRect() -> CGRect {
var targetRect = self.bounds
if let scrollView = self as? UIScrollView {
let contentInset = scrollView.contentInset
let contentSize = scrollView.contentSize
targetRect.origin.x = contentInset.left
targetRect.origin.y = contentInset.top
targetRect.size.width = targetRect.size.width - contentInset.left - contentInset.right > contentSize.width ? targetRect.size.width - contentInset.left - contentInset.right : contentSize.width
targetRect.size.height = targetRect.size.height - contentInset.top - contentInset.bottom > contentSize.height ? targetRect.size.height - contentInset.top - contentInset.bottom : contentSize.height
}
return targetRect
}
}
网友评论