2015-07-20 55 views
0

在我的應用程序中,我有一個UIView。用戶可以旋轉,更改大小,更改UIView的位置。我想捕獲UIView的每個狀態並將其保存在一個數組中。iOS - 如何捕捉UIView屬性

例如,用戶移動視圖,然後旋轉視圖,然後調整視圖大小。我想保存在陣列中的所有這些3次:

[mutableArray addObject:view1]; //when user moves 
[mutableArray addObject:view1]; //when user rotate 
[mutableArray addObject:view1]; //when user resize 

但是當我這樣做,我得到同樣的UIView在其當前狀態。我如何捕獲這個UIView的所有3個狀態?

+2

您應該將要保存的屬性存儲在數組中,而不是視圖本身。編輯:有關如何複製,請參閱http://stackoverflow.com/a/13756101/1305067,如果這是你的事情。 – paulvs

+0

@paulvs我明白了。但是沒有辦法捕獲'UIViews'?謝謝,我會檢查出這個鏈接 – tnylee

回答

0

如果要捕獲並保存數組上的視圖,則需要實例化一個新對象。你現在正在做的只是creating shallow copies,即將指針保存到同一個對象,而不是保存一個指向該對象副本的指針。

你應該這樣做:

[mutableArray addObject:[view1 copy]]; 

這將創建對象完全相同的副本,並將其添加到陣列。

這不是您想要實現的建議方法。您應該像評論所說的那樣,保存對象的屬性並在需要時重新創建,而不是將完整的視圖對象保存在數組中。

0

取決於您想要對保存的視圖執行什麼操作。你的代碼所做的就是保存對數組中視圖的引用。您可能希望按照nunofmendes的建議複製對象,或按照paulvs的建議複製屬性。但是,如果你想捕捉什麼樣的觀點看起來像在那一刻,使用[view snapshotViewAfterScreenUpdates].

[mutableArray addObject:[view1 snapshotViewAfterScreenUpdates:YES]]; //when user moves 
[mutableArray addObject:[view1 snapshotViewAfterScreenUpdates:YES]]; //when user rotate 
[mutableArray addObject:[view1 snapshotViewAfterScreenUpdates:YES]]; //when user resize 

您將結束與視圖對象的數組。