如何创建UIImageView实例的副本?

时间:2011-01-07 02:06:01

标签: iphone cocoa-touch uiimageview copy

如何创建可以独立于第一个实例操作的UIImageView实例的副本?

我试过UIImageView *tempCopy = [instance copy]但它崩溃了。还有另一种方式吗?

3 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:7)

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

对于懒惰的倾向,这看起来像:

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

答案 2 :(得分:-1)

回答Mike Abdullah的回答......问题是他需要保存他图像视图中已存在的所有子视图......

使用这种方法的问题是NSCoding的默认实现不会保存那些视图......因此他必须覆盖该方法并提供深度编码(对于那些努力,他更好地符合NSCopying并执行深度拷贝)

如果您只需要一张静态图像(子视图不提供交互),我建议您执行以下操作

UIGraphicsBeginImageContext(imageView.rect.size);

[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];

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

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

这将确保tue子视图全部保存为静态图像......

如果您需要具有保留其互动的子视图的副本......这对您没有帮助......

问候