CATransitionフェードを使用してView Controllerをプッシュするのと同じ方法で、UIActivityIndicatorViewのアニメーションを停止しようとしています。
アニメーションを停止してから次のビュー コントローラーにフェードする代わりに、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
デビッドの答えと同じようstopAnimating
に、使用dispatch_after
してほんの一瞬遅らせると、成功することができました。これを達成するためのより良い方法はありますか?:
- (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];
});
}