gpt4 book ai didi

ios - UIView 重复 animateWithDuration CPU 100%

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:34 24 4
gpt4 key购买 nike

大家好,小问题。

我有一个我创建的 UIView 类,AnimatedUIView。在 init 中,我创建了一个像这样设置动画的 subview :

   - (void)animateView{
[UIView animateWithDuration:4.0
delay:1.0
options: nil
animations:^{
// Animation PART 1
}
completion:^(BOOL completed){
[UIView animateWithDuration:4.0
animations:^{
// Animation PART 2
}
completion:^(BOOL completed){
[self animateView];
}
];
}
];

}

我必须在第二个完成 block 中自己调用 [self animateView] 而不是使用选项 repeat 因为我只想延迟第一个动画 1 秒。

一切正常,我分配并初始化了我的 View 并将其添加为 subview ,并且它应该是动画的。

但是,当我关闭我的 super View 时,我猜想 ARC 完成了它的工作并释放了动画 View ,但是我的 CPU 占用了 100%!我已经调查过,如果我评论对 [self animateView] 的调用,当我关闭 super View 时,我的 CPU 不会飙升。

所以我设法解决了这个问题(通过在调用之前放置一个条件并在关闭 super View 之前更改一个 bool 值,keepAnimating = NO),我只是想了解为什么会这样这?为什么它会尝试保持动画效果,为什么会占用如此多的 CPU?如果我在完成 block 中放置一个 NSLog,我首先每 8 秒看到一次,但是当我关闭 super View 时,NSLog 每隔 ms 就会出现一次......

顺便说一句:它与这个问题有关:UIView animation using 90%CPU ,并没有真正回答。非常感谢!

最佳答案

CPU 达到 100% 几乎总是意味着无限递归。

我们只能猜测,因为只有 Apple 知道动画源代码中的内容。

在这种情况下,我猜想这可能是由于在动画无法再运行时触发了动画(例如,由于我们处于 dealloc 状态,因此没有层)。这意味着完成处理程序被立即调用,这会导致无限递归。

有更安全的方法来创建无限动画(例如,在层上使用 CAAnimation)。

关于ios - UIView 重复 animateWithDuration CPU 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com