2012-09-16 60 views
2

我寫了一個自定義UIStoryboardSegue,我正用它來在各種UIViewControllers之間轉換。動畫按需要工作,大部分時間顯示爲我在模擬器和設備上預期的那樣。如何防止在自定義UIStoryboardSegue結束時出現「閃爍」的視圖?

然而,SEGUE完成後,有時,我可以看到老UIViewController閃存一秒鐘的UIStoryboardSegue完成後,一小部分。結果擾亂了我期待的平穩過渡。不幸的是,我無法辨別出這種行爲的任何模式。

我已經包含了一個我正用來管理下面的segue的方法的準系統版本。有一種更可靠的方法來確保平穩過渡?難道我做錯了什麼?同樣,大部分時間賽格看起來都是我想要的。

- (void)perform 
{ 
    self.window = [[[UIApplication sharedApplication] delegate] window]; 
    UIViewController *source = (UIViewController *) self.sourceViewController; 
    UIViewController *dest = (UIViewController *) self.destinationViewController; 

    [self.window insertSubview:dest.view.window belowSubview:source.view]; 

    self.segueLayer = [CALayer layer]; 
    // Create and add a number of other CALayers for displaying the segue, 
    // adding them to the base segueLayer 

    // Create and add CAAnimations for animating the CALayers 
    // (code omitted for the sake of space) 

    [self.window addSubview:dest.view]; 
    [self.window.layer addSublayer:self.segueLayer]; 

    [source.view removeFromSuperview]; 
} 

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)isFinished 
{ 
    UIViewController *source = (UIViewController *) self.sourceViewController; 
    UIViewController *dest = (UIViewController *) self.destinationViewController; 

    if (isFinished) 
    { 
     // Remove and deallocate the CALayers previously created 
     [self.segueLayer removeFromSuperlayer]; 
     self.segueLayer = nil; 
     self.window.rootViewController = dest; 
    } 
} 
+0

我正在嘗試的一個建議是:爲所有CAAnimation實例設置'removedOnCompletion = NO'和'fillMode = kCAFillModeForwards'。也許他們正在重置。 –

回答

2

所以CAAnimations不改變實際層的價值觀,但那些與其相關的presentationLayer的。將fillMode設置爲kCAFillModeForwards可確保在動畫完成後presentationLayer的值不會恢復。但是,如果動畫的removedOnCompletion屬性設置爲YES(默認情況下),該圖層的外觀也可以恢復到其預先動畫狀態。

由於animationDidStop:回調可能在任何潛在的逆轉之後被調用,並且由於時序不準確,這可以解釋爲什麼您不總能看到逆轉。

+0

這個帳戶對我來說似乎相當有說服力。我試着設置'removedOnCompletion = NO'和'fillMode = kCAFillModeForwards'並且還沒有看到問題清單,我猜這是一個可能的解決方案。我會給它更多的測試。 –

+0

那麼,我一遍又一遍地運行新代碼,並沒有看到任何問題。好極了! –