你如何创建一个UIImageView实例的副本?

问题描述:

如何创建可独立于第一个实例进行操作的UIImageView实例副本?我试过UIImageView *tempCopy = [instance copy]但它崩溃了。有另一种方法吗?你如何创建一个UIImageView实例的副本?

+0

你确定你不想要它代表的UIImage? – 2011-01-07 02:11:31

+0

UIImageView是一系列UIButtons,我可以将它们当作UIImageView的UIImage吗? – John 2011-01-07 02:16:17

它可能会崩溃,因为UIImageView不符合NSCopying协议。所以你自己来做吧:实例化一个新的UIImageView并设置你感兴趣的原始属性。

+0

无论如何要复制所有的属性?我正在复制的是一个非常复杂的对象 – John 2011-01-07 02:12:12

+0

Howcome?这只是你需要分配的几个值而已。 – mvds 2011-01-07 02:23:39

UIImageView不符合NSCopying,但它确实符合NSCoding。存档您的视图,然后将其解压缩以获得全新副本。

对于懒洋洋地斜,这看起来像:

NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:imageView]; 
UIImageView *copy = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

在回答迈克·阿卜杜拉的反应......问题是他需要保存在他的图像视图中已存在的所有子视图.. 。

使用这种方法的问题是NSCoding的默认实现将不保存这些观点......所以他必须要覆盖的方法,并提供深层编码(对这些努力的他更符合NSCopying和执行深拷贝)

如果你需要的是一个静态图像(子视图不提供交互)我建议做以下

UIGraphicsBeginImageContext(imageView.rect.size); 

[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageView *copyImageView = [[UIImageView alloc] initWithImage:viewImage]; 

这将确保星期二子视图得到所有保存为静态图像...

,如果你需要的是有保留它们的相互作用子视图副本...这不会帮助你......

问候