我試圖停止在我的UIActivityIndicatorView上的動畫,我使用CATransition淡入淡出的方法來推動視圖控制器。UIActivityIndicatorView在CATransition之前保持動畫pushViewController
無論停止動畫,然後退到下一個視圖控制器,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];
});
}
感謝您的回覆,大衛。不幸的是'dispatch_async'不適合我。但是,如果我使用'dispatch_after'延遲執行轉換塊,只需幾分之一秒,'stopAnimating'的行爲就像預期的那樣。我編輯了我的問題以顯示我如何修改我的代碼。必須有更好的方法... – Snow 2013-04-25 16:31:00
檢查編輯的代碼。我忘了將所有東西都發送到默認隊列中。 – David 2013-04-25 17:01:34
所以activityIndicator現在停止動畫,但視圖不會推動...:/任何想法?我欣賞這種幫助 – Snow 2013-04-25 20:31:29