为啥 iOS 动画第一次运行时会变慢?
Posted
技术标签:
【中文标题】为啥 iOS 动画第一次运行时会变慢?【英文标题】:Why are iOS animations slow the first time they are run?为什么 iOS 动画第一次运行时会变慢? 【发布时间】:2011-11-07 23:58:19 【问题描述】:在我看来,我第一次运行动画(为 UIView 的框架或 CALayer 的位置等设置动画)非常不稳定,随后的动画很流畅。
是什么原因造成的,有没有办法预先缓存动画?
注意:这个问题与这个问题非常相似:UIImageView animations lag at first run,但我的动画中没有使用 UIImages。
【问题讨论】:
你提到这是UIImageView animations lag at first run的副本。 没错,我做到了。我想它不像我想象的那么重复,因为我没有在我的动画中处理 UIImages。编辑了问题的那一部分。 @ryleigh - 很公平。这是一个很好的问题,所以请投赞成票。 【参考方案1】:如果您有一个TextField
,我认为它是接收您的用户输入的内容。使用UITextFieldDelegate
方法Did
而不是Should
- (void)textFieldDidBeginEditing:(UITextField *)textField
//Do textfield animations and other view animations here
不要在里面做动画;
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
//Don't do textfield animations and other view animations here
//This is where the system does its own animations; raising the keyboard, etc
【讨论】:
您提出建议的技术原因是什么?为什么动画在“应该”中运行不流畅?【参考方案2】:假设您使用[UIImage imageNamed: @"herp.png"]
,图像将被缓存。如果图像被大量绘制,它将被解压到内存中,否则它会延迟加载图像并导致卡顿。
【讨论】:
我关心的动画没有使用 UIImages,虽然这很高兴知道。具体来说,在一种情况下,我将 UITextView 从其父级中删除,将其添加到另一个视图中,并使用[UIView animate...]
为其框架设置动画。第一次运行时卡顿,回到原来的视图并再次触发动画后,它很流畅。
这包括任何项目的渲染。如果从不编辑文本,则只需要渲染一次。这可能仍然会导致您的问题。但是,在阅读了您的其他帖子后,这很可能与您的键盘弹出有关。【参考方案3】:
在viewDidAppear
中运行它,而不是viewWillAppear
。缓存应该在图像确实出现之后进行,并且在用户看来应该是一样的。
【讨论】:
嗯,我正在处理的动画是对用户输入的响应,所以当视图出现时我无法正确播放它们。我使用了viewWillAppear
,因为我希望有一些方法可以在用户看到它们之前播放它们(这听起来很傻)。
奇数。您使用的是 [UIView beginAnimations] 方法还是基于块的 [UIView animateWithDuration: animations: ...] 方法?你在动画什么属性?除了框架还有什么?什么样的物体有多少?
好吧,在一种情况下,我要从其父级中删除 UITextView,将其添加到另一个视图中,并使用 [UIView animateWithDurationsEtc...] 为其框架设置动画。虽然在动画播放的同时,键盘被召唤,所以我开始怀疑键盘的创建是导致动画在这种情况下口吃的原因。这有意义吗,键盘现在缓存在某个地方,以便下次需要时不必重新创建它?如果是这样,有什么方法可以预先初始化它?
但在另一种情况下,我正在为一个按钮设置动画,其中涉及:CAGradientLayer 的 position
、colors
和 borderColor
的隐式动画,backgroundColor
的隐式动画CAShapeLayer 的一个,以及 CAShapeLayer 的 shadowPath
的 CABasicAnimation。在这种情况下,口吃不是那么明显或干脆的 - 但肯定会在播放动画时(在没有播放一段时间后)出现口吃,如果反复播放,它是流畅的。就像它是一个***,它创造了一个很好的凹槽,可以平稳地运行,强制一个隐喻。以上是关于为啥 iOS 动画第一次运行时会变慢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MySQL 查询在使用 LIMIT 和 Order BY 时会变慢?
为啥 Android Studio 在编辑 xml 文件或更改设计时会变慢?
为啥我们的 React Native 应用在 Android 手机上使用时会变慢?
使用 PNG 背景为 UIButton alpha 设置动画:为啥动画从 alpha = 0 过渡到 alpha = 1 时会变成亮白色?