0

我有一个矩形视图,其中包含从 xib 设置的两个标签(一个静态,一个动态)。当用户触摸视图时,我让它收缩并隐藏标签(使用UIView's -animateWithDuration: animations:)。

有什么办法可以只保存视图的上下文,然后再返回它?

我知道有,UIGraphicsGetCurrentContext但文档只是说:返回我猜是整个视图的图形上下文。(多么可怕的文档!)

似乎这是可能的并且与 . 一起常见CALayers,但这只是一种UIView方法,我不确定它是否用于CALayers其实现。

4

2 回答 2

2

不,您无法轻松保存和恢复整个视图和子视图内容。UIGraphicsGetCurrentContext可用于拍摄 a 的照片UIView,但不能用于保存子视图位置。

而是为每个子视图保留两组框架,然后通过设置在它们之间切换mySubview.frame

于 2013-06-18T17:29:21.587 回答
1

所以回答你的几个问题:

首先,UIView它的核心是一个CALayer. 您可以CALayer通过视图的layer属性访问底层。如果您正在做大量的动画工作,您可能会在某些时候发现这非常有用。在 iOS 的意义上,“图形上下文”基本上是存储有关当前绘图状态的信息的地方。

UIView一旦动画完成,提供动画(animateWithDuration等)的便捷方法会自动将视图的框架、边界等设置为其新的动画值。因此,您需要保留您正在更改的任何值,以便在需要时可以动画回它们。请注意,这可能不仅仅是框架 - 如果您要更改 alpha 值,您也希望保留它们,等等。

您可以尝试其他选项,但它们涉及使用级别稍低的 Core Animation API。这个现有的 StackOverflow 问题有一个非常好的总结:UIView animations with Autoreverse

于 2013-06-18T17:33:45.827 回答