// MARK: Round public extension UIView { public func round(byRoundingCorners: UIRectCorner = UIRectCorner.allCorners,cornerRadi: CGFloat) { self.round(byRoundingCorners: byRoundingCorners,cornerRadii: CGSize(width: cornerRadi,height: cornerRadi)) } public func round(byRoundingCorners: UIRectCorner = UIRectCorner.allCorners,cornerRadii: CGSize) { guard let maskLayer = self.layer.mask else { let rect = self.bounds let bezierPath = UIBezierPath(roundedRect: rect,byRoundingCorners: byRoundingCorners,cornerRadii: cornerRadii) defer { bezierPath.close() } let shapeLayer = CAShapeLayer() shapeLayer.path = bezierPath.cgPath self.layer.mask = shapeLayer self.layer.masksToBounds = true return } } } // MARK: UIView 快照 public extension UIView { public var snapshotimage: UIImage? { return snapshot() } 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() } self.drawHierarchy(in: snapRect,afterScreenUpdates: false) 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 } }
原文地址:https://www.jb51.cc/swift/321889.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。