1

我在應用程序中多次使用此標準代碼來將VC推送到導航。控制器。將視圖控制器推送到導航期間的動畫。控制器有時會停止工作

[self.navigationController pushViewController:detailController animated:YES]; 

但有時他們停止working-視圖控制器推correcty但沒有動畫(就像我會用「動畫:NO」),我不能找出原因。

任何建議什麼觀察或嘗試?

+0

有時它停止工作手段..?它會拋出一些錯誤或異常,或者它什麼都不做? – 2012-04-13 13:45:56

+0

應用程序正常工作(沒有崩潰),只是推動VC時動畫不見了。 – DixieFlatline 2012-04-13 13:48:38

+0

也許你是從另一個線程/隊列調用這個方法?像webcallback,塊等 – 2012-04-13 13:53:52

回答

0

每當你使用...動畫:是/否Cocoa框架將確定它是否可以做到這一點,更多的時候,它只是失敗。就像邁克爾說的那樣,你可能不在主線上,或者誰知道什麼。如果您在NSWindow上查看最新Lion API的全屏動畫,您會發現動畫的各種代表均未提供詳細信息。所以我不希望蘋果迴歸動畫師並添加這樣的功能。

要回答你的問題,主要我會使用我自己的自定義動畫使用核心動畫。他們確實沒那麼糟糕。爲了讓您一開始,你可以創建一個方便類或類的方法是這樣的:

+ (void) animateWithDuration:(NSTimeInterval)duration 
        animation:(void(^)())animationBlock 
        completion:(void(^)())completionBlock { 

    [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 

     if (duration > 0) [context setDuration:duration]; 
     [context setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]]; 

     if (animationBlock) animationBlock(); 

    } completionHandler:^ { 

     if (completionBlock) completionBlock(); 

    }]; 
} 

然後,您可以使用它像這樣幾個動畫。像這樣...

[AnimationContext animateWithDuration:myDuration animation:^{ 

     // You can use whatever animation you want here or even nest 
     CABasicAnimation *fade = /* opacity animation */; 
     [view.layer addAnimation:fade forKey:nil]; 

    } completion:^{ 

     // Do some completion here. 
}]; 

請注意,您可以通過這種方式更好地控制動畫。

希望這回答你正在尋找什麼。

(注巨大的,我的例子是針對Mac OS X在iOS上相當於NSAnimationContext是使用CATransaction包裝)

+1

當你已經有一門課爲你做這個課時,你不應該自己寫。相反,你會發現問題並修復它。 – aryaxt 2012-04-13 18:18:42

+0

我同意aryaxt,如果你不需要任何控制動畫。 – Arvin 2012-04-13 18:25:20

相關問題