Objective c UIActivityIndicatorView保持对前面的CATTransition pushViewController设置动画

Objective c UIActivityIndicatorView保持对前面的CATTransition pushViewController设置动画,objective-c,uiactivityindicatorview,catransition,Objective C,Uiactivityindicatorview,Catransition,我正在尝试停止UIActivityIndicatorView上的动画,方法与使用CATTransition淡入淡出推送视图控制器的方法相同 UIActivityIndicatorView不会停止动画,然后淡入下一个视图控制器,而是在整个淡入过程中继续设置动画,无论我设置的持续时间有多长 有没有办法让旋转停止,然后用同样的方法推动/减弱 - (void)pushView:(NSNotification *)notification { [self.activityIndicator st

我正在尝试停止UIActivityIndicatorView上的动画,方法与使用CATTransition淡入淡出推送视图控制器的方法相同

UIActivityIndicatorView不会停止动画,然后淡入下一个视图控制器,而是在整个淡入过程中继续设置动画,无论我设置的持续时间有多长

有没有办法让旋转停止,然后用同样的方法推动/减弱

- (void)pushView:(NSNotification *)notification {

    [self.activityIndicator stopAnimating];
    NextViewController* nextViewController = [[NextViewController alloc] init];
    CATransition *transition = [CATransition animation];
    transition.duration = 1.5f;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];
    [self.navigationController pushViewController:nextViewController animated:NO];

}
编辑1

按照David的回答,如果我在之后使用了
dispatch\u并延迟了几分之一秒,我就能够成功地
停止动画制作
。有没有更好的方法来实现这一点

- (void)pushView:(NSNotification *)notification {

    [self.activityIndicator stopAnimating];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.0001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){
        NextViewController* nextViewController = [[NextViewController alloc] init];
        CATransition *transition = [CATransition animation];
        transition.duration = 1.5f;
        transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        transition.type = kCATransitionFade;
        [self.navigationController.view.layer addAnimation:transition forKey:nil];
        [self.navigationController pushViewController:nextViewController animated:NO];
    });
}

我以前也遇到过类似的情况。您正在运行的被称为同步执行。在同步执行中,直到编译器终止函数,即
}
,UI才会更新。你怎么避开这个?简单。只需在异步调度中运行任何方法来更新UI即可:

- (void)pushView:(NSNotification *)notification {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

dispatch_async(dispatch_get_main_queue(), ^(void){
    [self.activityIndicator stopAnimating];
});

NextViewController* nextViewController = [[NextViewController alloc] init];
CATransition *transition = [CATransition animation];
transition.duration = 1.5f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:nextViewController animated:NO];

});

}
哎呀!我忘了把另一个代码放在一个简单的分派中!尝试编辑的代码,它应该工作

这样,
[self.activityIndicator stop animating]
在优先级线程上运行,而函数中的其余代码在默认优先级线程中运行,以您期望的方式有效地同时运行代码


干杯

谢谢你的回复,大卫。不幸的是,
dispatch\u async
对我不起作用。但是,如果我在
之后使用
dispatch\u延迟过渡块的执行,时间仅为几分之一秒,
停止动画
的行为与预期的一样。我编辑了我的问题以显示我是如何修改代码的。必须有更好的方法…检查编辑的代码。我忘记在默认队列中调度整个事件。因此activityIndicator现在停止动画,但视图不推…:/有什么想法吗?不管怎样,我都很感激你的帮助