使用 UIView 动画后应用程序变慢
Posted
技术标签:
【中文标题】使用 UIView 动画后应用程序变慢【英文标题】:App slowness after using UIView Animations 【发布时间】:2013-06-20 19:40:03 【问题描述】:所以我有一个应用程序,一旦应用程序打开,我就会为它的一些 UI 元素设置动画。这些动画是使用简单的 UIView 动画完成的。下面是 viewDidLoad 部分的示例
//animate settings in the frame
CGRect settingsFrame = settingsView.frame;
settingsFrame.origin.x = -104;
settingsFrame.origin.y = 457;
settingsView.frame = settingsFrame;
//animate about in the frame
CGRect aboutFrame = aboutView.frame;
aboutFrame.origin.x = -104;
aboutFrame.origin.y = 457;
aboutView.frame = aboutFrame;
这里是调用的相应方法部分。
CGRect settingsFrame = settingsView.frame;
settingsFrame.origin.x = 0; // new x coordinate
settingsFrame.origin.y = 457; // new y coordinate
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
settingsView.frame = settingsFrame;
CGRect aboutFrame = aboutView.frame;
aboutFrame.origin.x = 104; // new x coordinate
aboutFrame.origin.y = 457; // new y coordinate
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
aboutView.frame = aboutFrame;
还有 4 组匹配的代码来完成动画。我的问题是,每当启用 viewDidLoad 部分(未注释掉)时,它都会减慢我的应用程序中向 xib 的其他转换。你们知道我如何保持这些动画但没有缓慢的过渡吗?
除此之外,我应该说这是在 ios 7 和 Xcode 5 开发者预览版上开发的,所以我不排除存在错误...
【问题讨论】:
如果它们都具有相同的持续时间和相同的动画曲线,您为什么要在单独的动画“块”中执行它们? 因为每个块去到一个稍微不同的地方。没有每个块,我无法使其正常运行。你知道让它工作的方法吗? 为所有内容设置初始位置。然后使用UIView animate: with...
做动画。如果您在讨论代码中的不同点,则使用多个动画块(但它们可能在后台同时工作,从而导致“缓慢”)。根据我的经验,在单个动画调用中执行所有并发动画效果最流畅,如果您能找到这样做的方法。
【参考方案1】:
您忘记在动画块的末尾添加 commitAnimations... 执行以下操作,您的问题将得到解决。
CGRect settingsFrame = settingsView.frame;
settingsFrame.origin.x = 0; // new x coordinate
settingsFrame.origin.y = 457; // new y coordinate
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
settingsView.frame = settingsFrame;
**[UIView commitAnimations];**
CGRect aboutFrame = aboutView.frame;
aboutFrame.origin.x = 104; // new x coordinate
aboutFrame.origin.y = 457; // new y coordinate
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
aboutView.frame = aboutFrame;
**[UIView commitAnimations];**
【讨论】:
以上是关于使用 UIView 动画后应用程序变慢的主要内容,如果未能解决你的问题,请参考以下文章