1
24
假设:您希望有多个动画步骤(即位置不会随帧大小线性变化)。 这对于一个“标准”的uiview动画是不可能的。为什么?帧/边界仅设置一次。 Core Animation 有三层树:
uiview是一个围绕模型层的(有点薄)包装器。在uiview动画期间,核心动画更新演示/渲染树-模型树表示动画的端点。结果是,您的代码可以(在大多数情况下)将动画视为即时的-将视图从A移动到B会立即将其移动到B;更改只是对用户进行动画处理。 对于Calayer/CaAnimation,您可以直接做一些更复杂的事情,但我没有做过太多的研究。 可以使用-[uiview setAnimationDidstopSelector:]将多个动画链接在一起。(您也可以尝试将多个动画与setAnimationDelay一起使用,但我不确定同一属性上的多个动画会发生什么情况;您可能会遇到setAnimationBeginsFromCurrentState:。) 如果您真的想要细粒度的控制,caDisplayLink(OS 3.1+)是一个计时器,在每次屏幕刷新后都会触发它。回退选项(用于3.0支持)是使用30/60Hz左右的nstimer。 |
2
14
完成@grizzlynetch's anwer,您可以设置
|
3
13
我知道这是一个古老的问题,但这段代码对我来说非常适用(适用于您更改帧的例子)。
当然,您可以从另一个对象调用这个方法。“技巧”是调用layoutifneeded(或者直接调用layoutSubview——同样的,如果更改了setNeedsLayout被调用的帧)。 作为TC。很好地解释了“层树”,您只需强制表示层显示带有动画的模型层的最后阶段。 这种方法的优点是可以控制帧/边界何时更改以及何时更改为即时更改。 希望这能帮助别人:)。 |
4
5
为完整性过账。感谢TC。为了解释我想做的,确切地说,是不支持核心动画。 我最终想出了一个合理的解决办法。而不是在-layoutSubview中布局子视图,而是在-setbounds中这样做:。然后,当我在uiview+beginimations:block中包装一个-setbounds:call时,这些定位调用也会被动画化,最终的结果是所有东西都会正确地动画化到它应该在的地方。 |
János · 如何在布局子视图后更新约束? 10 年前 |
Steveo · iOS 8 GM上无限循环中的layoutSubviews 10 年前 |
Bob de Graaf · 自定义UI视图布局带有方向和动画的子视图? 11 年前 |