2012-11-29 96 views
3

我正在使用導航控制器,並試圖在新View Controller推送之前運行動畫。爲此,我從UINavigationController委託中捕獲事件,並運行動畫。也就是說,顯然iOS動畫是異步運行的,所以方法返回,我的動畫和標準的推動動畫同時運行。有關如何解決這個問題的任何想法?在動畫運行時暫停執行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

+0

在推動新的視圖控制器之前做動畫怎麼樣?動畫完成後,在完成塊中,您可以進行推送。 – iDev

+0

@ACB我將如何觸發初始事件來啓動動畫?我試着重載'pushViewController:animated:'方法,它工作正常。問題是我想要一個與'popViewControllerAnimated:'並行的效果,而且這個效果要難得多。 – Herm

回答

0

算你描述'事件'是什麼?如果它是一個方法,那麼你可以把它稱爲[self method()];在那裏你寫了'//在這裏設置動畫...',然後將你的視圖控制器放到完成塊中。或者,您可以簡單地寫出您的UIView動畫代碼並使用setAnimationDidStopSelector,並設置您的方法將視圖控制器作爲選擇器。確保您也可以通過[UIView setAnimationDelegate:self];將您的視圖設置爲代表。這種方式僅在動畫完成後纔會發生推送視圖。如果知道動畫持續時間,並設置延遲時間以在動畫完成之前的幾分之一秒內執行推視圖控制器,則還可以查看-(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay。調整它以獲得最佳結果。

相關問題