克隆UIImageView

时间:2018-05-08 04:05:52

标签: ios swift

我有一个UIImageView:

let imageView = UIImageView()
imageView.image = UIImage(named: "name")
imageView.layer.cornerRadius = 30
imageView.layer.masksToBounds = true

// .. constraints to imageView

view.addSubview(imageView)

我正在尝试创建同一个imageView的副本,并将其存储在另一个变量中。我尝试使用NSKeyedArchiver但它不起作用,这就是我所拥有的:

extension UIView {
   func copyView<T: UIView>() -> T {
        return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T
    }
}

我的目标是让imageView cloneImageViewimageView完全相同

var cloneImageView = imageView.copyView() 

2 个答案:

答案 0 :(得分:1)

我认为UIImageView不符合NSCopying协议。因此它会崩溃。因此,使用新的UIImageView实例化将是一个解决方案。

Please refer to this!

答案 1 :(得分:1)

如果你想复制UIImageView并匹配所有属性,比如大小,剪裁,图像方面,opacity等等,你应该克隆所有这些属性,我为Objective C中的这个解决方案编写扩展{ {3}}

但要复制UIImage的{​​{1}},您可以在UImageViewNSKeyedUnarchiver将其转换为行数据之后使用UIImageJPEGRepresentation

如果您想在没有商店的情况下进行克隆,可以使用copy()创建位图图像的副本。具有相同比例和方向的新图像

UIImagePNGRepresentation
  

Swift扩展

if  let image  = imageView.image , let bitmapCopy =  image.cgImage?.copy()  {
    let newImage = UIImage.init(cgImage: bitmapCopy, scale: image.scale, orientation:  image.imageOrientation)
 }