2015-07-20 49 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 

您将结束与视图对象的数组。