0

我正在尝试使用自动布局为我ADBannerView的开屏和关屏设置动画。预自动布局(设置框架和动画)一切正常。现在我有以下代码,它会继续运行viewDidLoad以确保广告横幅不在屏幕上。

[UIView animateWithDuration:kADAnimationDuration
                 animations:^{
                     _addBannerDistanceFromBottomConstraint.constant = 32;
                     [self.view layoutIfNeeded];    
}];

此代码有效,但速度很layoutIfNeeded需要很长时间(相对)并导致性能不佳。删除线使一切变得又好又快,但动画不起作用。

问题是......为什么这么慢/我该如何加快速度?

编辑:我的 UI 相当重要,我认为布置所有内容可能是原因,所以我尝试创建一个简单UIView的横幅并将我的subview横幅layoutIfNeeded作为subview. 不过性能没有变化。

4

2 回答 2

3

我创建了一个应用程序,仅此ADBannerView而已。存在同样的问题。我作为一个错误提交给 Apple 并得到了“重复”,所以我想这是一个已知问题。

作为一种解决方法,我从屏幕上的广告横幅开始,仅当我获得有效广告时才在屏幕上移动。虽然在情节提要中使用起来稍微有点烦人,但用户不会注意到差异,并且可以防止速度变慢。

编辑:我一直在更多地使用自动布局,我得出了一个不幸的结论,我似乎与 Matt Neuburg 分享了这个结论。他在一篇题为“ iOS 上的自动布局缓慢”的文章中写道:

很遗憾,但 iOS 上的自动布局很慢。

它几乎总结了我在将我的一个应用程序转换为自动布局时遇到的几个问题。性能根本不存在。Matt 在他的帖子中给出的示例具有自动布局需要 5 倍的时间才能完成相同的任务。

现在,我想我会避免任何复杂到足以使自动布局有用的自动布局。

编辑: iOS 8处于测试阶段,约束变得更快。仍然有很多(50+)使用时,尤其是在旧设备上,但从测试到目前为止,我得到的以前的 2 秒延迟已减少到大约 0.4 秒。通过这种更改,约束可能已经被加速到足以用于一些约束繁重的视图工作。

于 2013-01-03T16:21:00.743 回答
1

一个问题可能是在 viewDidLoad 中执行此操作,其中尚未设置视图参数,但是,我不知道为什么会使其变慢。您可以改为在 viewDidAppear 中尝试。此外,根据我在 WWDC 2012 自动布局会话中看到的内容,您应该在动画块外部而不是内部添加约束(或修改常量)。尝试将其移动到动画块上方。

于 2012-12-31T04:31:51.720 回答