2011-01-07 30 views
10

如何創建可獨立於第一個實例進行操作的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

回答

14

它可能會崩潰,因爲UIImageView不符合NSCopying協議。所以你自己來做吧:實例化一個新的UIImageView並設置你感興趣的原始屬性。

+0

無論如何要複製所有的屬性?我正在複製的是一個非常複雜的對象 – John 2011-01-07 02:12:12

+0

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

6

UIImageView不符合NSCopying,但它確實符合NSCoding。存檔您的視圖,然後將其解壓縮以獲得全新副本。

對於懶洋洋地斜,這看起來像:

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

在回答邁克·阿卜杜拉的反應......問題是他需要保存在他的圖像視圖中已存在的所有子視圖.. 。

使用這種方法的問題是NSCoding的默認實現將不保存這些觀點......所以他必須要覆蓋的方法,並提供深層編碼(對這些努力的他更符合NSCopying和執行深拷貝)

如果你需要的是一個靜態圖像(子視圖不提供交互)我建議做以下

UIGraphicsBeginImageContext(imageView.rect.size); 

[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 

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

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

這將確保星期二子視圖得到所有保存爲靜態圖像...

,如果你需要的是有保留它們的相互作用子視圖副本...這不會幫助你......

問候