ios - 在 Swift 中将 UIImageView 的可见部分作为 UIImage 获取
问题描述
在我的应用程序中,我正在尝试实现裁剪功能。所以现在我需要将 UIImageView 的可见部分转换为 UIImage。这是 UI 调试器的屏幕截图。
我试图用这个功能来实现它,但它不起作用。
func imageFromImageView(imageView: UIImageView) -> UIImage? {
UIGraphicsBeginImageContext(imageView.frame.size)
let context = UIGraphicsGetCurrentContext()!
context.rotate(by: 2 * .pi)
imageView.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image
}
解决方案
您可以使用波纹管扩展:
private var rendererKey: UInt8 = 0
extension UIView {
var renderer: UIGraphicsImageRenderer! {
get {
guard let rendererInstance = objc_getAssociatedObject(self, &rendererKey) as? UIGraphicsImageRenderer else {
self.renderer = UIGraphicsImageRenderer(bounds: bounds)
return self.renderer
}
return rendererInstance
}
set(newValue) {
objc_setAssociatedObject(self, &rendererKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
func snapImageView() -> UIImageView {
let img:UIImage = renderer.image { ctx in
DispatchQueue.main.async {
layer.render(in: ctx.cgContext)
}
}
let imageView:UIImageView = UIImageView(image: img)
imageView.frame = renderer.format.bounds
imageView.clipsToBounds = true
return imageView
}
}
// Generate image and image view of any view instance
let anImageView = yourView.snapImageView()
推荐阅读
- javascript - 通过后台任务c#下载文件
- javascript - 分区 N,其中零件的数量和每个零件都是 2 的幂,并且零件大小和数量受到限制
- android - 我如何从多个已安装的应用程序中选择图像,而不仅仅是相机或画廊
- html - 使可点击的 div 覆盖一个按钮
- xml - 无法识别撒克逊输入编码?
- python - 无法从给定的代码中获得所需的输出?
- c++ - 用 C++ 在 ESP32 上连接 wifi
- python - 如何在 reddit 帖子上找到赞成票的数量
- swift - 无法单击 iOS 14 中 TableViewCell 内的按钮
- python - 我的快速排序 Python 代码有问题吗?