在动画运行时暂停iOS应用程序主线程上的执行

时间:2012-11-29 19:59:20

标签: ios multithreading animation

我正在使用导航控制器,我正在尝试在新的View Controller推送之前运行动画。为此,我从UINavigationController委托中捕获事件并运行动画。也就是说,显然iOS动画意味着异步运行,因此方法返回,我的动画与标准推送动画同时运行。有关如何解决这个问题的想法吗?

情况如下:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (animated)
    {
        [UIView animateWithDuration:kGFDefaultAnimationDuration
                                      delay:0.0
                                    options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction
                                 animations:^{
                                     // Set up animations here...
                                 }
                                 completion:^(BOOL finished) {

                                 }];
    }
}

换句话说,我想从完成块中返回navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

1 个答案:

答案 0 :(得分:0)

你算一下'事件'是什么?如果它是一个方法,那么你可以把它称为[self method()];你在哪里写'//在这里设置动画......'然后在完成块中推动你的视图控制器。或者,你可以简单地编写你的UIView动画代码并使用setAnimationDidStopSelector并只设置你的方法来推动视图控制器作为选择器。确保您还通过[UIView setAnimationDelegate:self];将视图设置为委托。这样,推送视图仅在动画完成后发生。如果您知道动画持续时间,也可以查看-(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay,并设置延迟以在动画完成之前执行推送视图控制器几分之一秒。调整它以获得最佳效果。