我有一个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 cloneImageView
与imageView
完全相同
var cloneImageView = imageView.copyView()
答案 0 :(得分:1)
我认为UIImageView不符合NSCopying协议。因此它会崩溃。因此,使用新的UIImageView实例化将是一个解决方案。
答案 1 :(得分:1)
如果你想复制UIImageView并匹配所有属性,比如大小,剪裁,图像方面,opacity等等,你应该克隆所有这些属性,我为Objective C中的这个解决方案编写扩展{ {3}}
但要复制UIImage
的{{1}},您可以在UImageView
或NSKeyedUnarchiver
将其转换为行数据之后使用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)
}