|
|
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时,这些定位调用也会被动画化,最终的结果是所有东西都会正确地动画化到它应该在的地方。 |
|
|
pajevic · UILabel大小更改不会使用自动布局设置动画 8 年前 |
|
|
user8822312 · swift:递归动画 8 年前 |
|
|
beta Rob · 通过使UI元素闪烁来指示错误 8 年前 |
|
|
az2902 · UIView动画完成块使用TRUE调用两次 8 年前 |
|
|
MEH · 如何用动画更改导航栏的背景图像? 8 年前 |
|
|
Dave · iOS动画故障,Y坐标问题 10 年前 |