【问题标题】:Animated constraint change layoutIfNeeded slow动画约束更改 layoutIfNeeded 缓慢
【发布时间】:2012-12-31 00:42:07
【问题描述】:

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

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

这段代码可以工作,但它layoutIfNeeded 需要很长时间(相对)并导致性能不佳。删除线使一切变得又好又快,但动画不起作用。

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

编辑:我的 UI 相当重要,我认为布置所有内容可能是原因,所以我尝试创建一个简单的 UIView 并将我的横幅作为 subview 放在那里,然后我只需要在 subview 上调用 layoutIfNeeded,其中包含 1 个项目。不过性能没有变化。

【问题讨论】:

    标签: ios ios6 uiviewanimation autolayout


    【解决方案1】:

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

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

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

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

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

    现在,我想我会避免自动布局,因为任何复杂到足以让自动布局有用的东西。

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

    【讨论】:

    • 感谢马特帖子的链接。出于同样的原因,我也放弃了自动布局。太慢了。
    【解决方案2】:

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

    【讨论】:

    • 您有权更改动画块中的约束。我把它移了出来,但一点效果都没有。我调用动画块viewDidLoad 的原因仅仅是因为它与ADBannerView 加载失败时调用的方法相同。我试着把它移到viewDidAppear 并且行为是相同的。
    • 如果没有使用 ADBannerView 的经验——它是从服务器下载吗?我当然从未见过像您在为约束设置动画时看到的那种减速。
    • 是的,广告横幅从服务器下载。他们有一个委托方法,基本上是“成功”和“失败”调用。失败,您将广告制作成动画。成功了你的动画。我想我的下一个测试将是用一个简单的UIView 来尝试动画。会不会是 AdBannerView 本身导致约束动画变慢? (我的其他约束都没有任何动画问题)。
    • @DBD,我认为这可能是 AdBannerView 的问题——我对其他类型的视图也没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2018-06-17
    • 2016-12-15
    相关资源
    最近更新 更多