我正在尝试使用自动布局为我的ADBannerView
开启和关闭屏幕设置动画。预自动布局(设置框架和动画)一切正常。现在我有以下代码,它在viewDidLoad
上运行,以确保广告横幅在屏幕外。
[UIView animateWithDuration:kADAnimationDuration
animations:^{
_addBannerDistanceFromBottomConstraint.constant = 32;
[self.view layoutIfNeeded];
}];
此代码有效,但慢。 layoutIfNeeded
花了很长时间(相对)并导致性能不佳。删除行会使一切变得美观和快速,但动画不起作用。
问题是......为什么这么慢/如何加快速度呢?
编辑:我的用户界面非常重要,我认为所有内容都可能是原因所在,所以我尝试创建一个简单的UIView
并将我的横幅放在那里{{1然后我只需要在subview
上调用layoutIfNeeded
,其中包含1个项目。虽然性能没有变化。
答案 0 :(得分:3)
我使用ADBannerView
创建了一个应用程序而没有别的。存在同样的问题。我提交给Apple作为一个错误并且“重复”,所以我想这是一个已知的问题。
作为一种解决方法,我从屏幕上的广告横幅开始,只有在我获得有效广告时才会在屏幕上移动。虽然在故事板中使用会稍微烦一些,但用户不会注意到差异,并且可以防止速度变慢。
编辑:我一直在使用汽车布局工作,我得出了一个不幸的结论,我似乎与Matt Neuburg分享。在他写的标题为“auto layout slow on iOS”时,他说:
很遗憾,但iOS上的自动布局很慢。
它几乎总结了我将我的一个应用程序转换为自动布局的几个问题。表现根本不存在。 Matt在他的帖子中给出的示例自动布局需要花费5倍的时间来完成相同的任务。
现在,我想我会避免自动布局任何复杂到足以让自动布局变得有用。
编辑 iOS 8
处于测试版状态,约束速度明显加快。仍然在使用大量(50+)时,特别是在较旧的设备上,但从测试到目前为止,我得到的前2秒延迟已减少到约0.4秒。通过这种变化,可能已经加快了约束,使其可以用于某些约束性的重视工作。
答案 1 :(得分:1)
一个问题可能是在viewDidLoad中执行此操作,其中尚未设置视图参数,但是,我不知道为什么会使它变慢。您可以在viewDidAppear中尝试它。另外,根据我在WWDC 2012自动布局会话中看到的内容,您应该在动画块之外添加约束(或修改常量),而不是在内部。尝试将其移动到动画块上方。