3

我正在使用导航控制器,并且试图在新的视图控制器推送之前运行动画。为此,我从 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从完成块中返回。

4

1 回答 1

0

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

于 2012-11-30T05:24:57.407 回答