使用动画更新视图背景颜色会使app无响应

时间:2014-04-06 07:58:51

标签: ios multithreading user-interface uiviewanimation

我遇到了这个问题,到目前为止找不到一个好的解决方案。

在某些特定动作之后,我想用动画更改self.view的背景颜色。所以我做了这样的事情:

 [UIView animateWithDuration:5.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            self.view.backgroundColor = [UIColor orangeColor];
        } completion:^(BOOL finished) {
            self.backgroundColor = self.view.backgroundColor;
        }];

我希望这个动画变得缓慢而简单,这就是为什么它可以被激活3-5秒,而不仅仅是快速切换到另一个。

问题在于,如果我在主线程上创建它,那么在动画执行期间,这些3-5秒内我的应用程序完全没有响应。如果我在后台线程上创建它,我会遇到很多问题,这是预期的。

有没有什么好的解决方案如何在不冻结屏幕的情况下用动画慢慢更新背景颜色?

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要使用UIViewAnimationOptionAllowUserInteraction选项而不是UIViewAnimationOptionCurveEaseOut来允许用户互动。

[UIView animateWithDuration:5.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    self.view.backgroundColor = [UIColor orangeColor];
} completion:^(BOOL finished) {
    self.backgroundColor = self.view.backgroundColor;
}];