ios – 在常见情况下,何时使用Core Animation而不是UIView动画是合适的

ios – 在常见情况下,何时使用Core Animation而不是UIView动画是合适的,第1张

概述这与许多小错误有关,这些小错误可能被一个人刻板地认为是次要的,但主要是另一个人. 我越来越注意到的是,当使用UIView animateWithDuration:时,它实际上会修改不必要的东西,例如我的视图的多个属性,做一个简单的隐藏/显示样式动画等等. 在诸如UINavigationBar没有为某个旋转过渡正确设置位置动画的情况下,或者在帧更新时没有动态显示状态栏的标题视图,当视图的子图层在其父 这与许多小错误有关,这些小错误可能被一个人刻板地认为是次要的,但主要是另一个人.

我越来越注意到的是,当使用UIVIEw animateWithDuration:时,它实际上会修改不必要的东西,例如我的视图的多个属性,做一个简单的隐藏/显示样式动画等等.

在诸如UINavigationbar没有为某个旋转过渡正确设置位置动画的情况下,或者在帧更新时没有动态显示状态栏的标题视图,当视图的子图层在其父视图的情况下会隐式动画时,事情似乎很挑剔物业变化……

其中很多我一直在重新审视,并转换为CAAnimations,因为它们似乎更容易管理,因为它们实际上并没有修改我的视图的目标属性值.

一个简单的例子是,使用[vIEw setHIDden:],然后将其设置为动画或视图外,但在动画运行时视图实际上已经可见或隐藏.

另一个是,需要转换/旋转/缩放UINavigationController的视图,并使用CAAnimation来执行它,因为如果我修改UINavigationController的视图及其任何父视图的转换属性值,UINavigationbar不会移动到它的正确位置.

所以在这个问题的结论中,我一直在来回,并且在我的情况下找到了比另一个更合适的地方,但主要是,我想听听其他人对这些情景的看法,如果有的话洞察Apple提供的内容,让我对自己的方法感觉更好.

提前致谢.

解决方法 在一天结束时,所有UIKit风格的动画都转换为核心动画风格的动画;也就是说,一切都是使用Core Animation实际动画的. API之间的差异主要是方便之处:UIKit风格的动画函数更新模型值,提交动画以反映表示层中随时间的变化.

您还必须小心,您正在为UIKit表示可以设置动画的属性设置动画.例如,虽然您可以在技术上为UIScrollVIEw上的属性设置内容,例如contentSize和contentOffset,但它们不受官方支持,因此您必须处理副作用.

另外,frame是一种特殊情况,因为它实际上是一个派生属性,由中心,变换和边界组成(除了CALayer上的anchorPoint,UIVIEw不公开).动画视图的框架可能会出现许多意外问题,通常涉及旋转. Core Animation没有这个问题,因为frame不是CALayer上可显式动画的属性.如果您遇到涉及该视图的仿射变换(例如,缩放,平移,旋转)的奇怪行为,请尝试在UIKit样式的动画中使用边界和居中.

确实,在UIKit中设置某些视图的动画可能会产生意想不到的副作用或错误,因为除了为它们设置动画之外,您还要更新模型值.另一方面,Core Animation更灵活,因为您可以更好地控制更新模型层或表示层的方式和时间.

但我不同意UIKit正在不必要地修改内容.它修改了需要修改的内容,以便提交您请求的动画更改以及更新其模型值.当您为诸如frame之类的属性设置动画时,这将在当前运行循环之后隐式调用该视图上的layoutSubvIEws(),该循环可以级联到其他子视图,依此类推.

如果您希望UIKit在设置动画之前执行其所有布局逻辑,则在调用动画块之前调用setNeedsLayout()以及layoutIfNeeded().如果您希望UIKit在动画提交的同时实际动画整个子视图层次结构的更改,请指定UIVIEwAnimationoptions.layoutSubvIEws选项.这将在动画块中立即触发子视图布局,因此这些值也是动画的.否则,动画更改的模型值将在下一个运行循环中触发布局更新.

一般来说,我很少注意到使用UIKit风格的动画功能.因此,如果有人花了大量时间在iOS上制作动画,我会说:

在每个地方都可以使用UIKit风格的动画,因为它们非常方便.当您遇到UIKit风格的动画问题时,或者您需要特定控制图层的模型和演示文稿值如何更新时,应使用核心动画风格的动画.

总结

以上是内存溢出为你收集整理的ios – 在常见情况下,何时使用Core Animation而不是UIView动画是合适的全部内容,希望文章能够帮你解决ios – 在常见情况下,何时使用Core Animation而不是UIView动画是合适的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1005672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存