2015-05-07 71 views
2

我使用下面的代碼來覆蓋自定義segue中的執行方法,以在視圖控制器之間移動時實現滑動效果。自定義Segue閃爍

- (void)perform 
{ 
    MasterController *sourceController = (MasterController *)self.sourceViewController; 
    MasterController *destinationController = (MasterController *)self.destinationViewController; 

    CGRect frame = sourceController.view.frame; 

    [sourceController.view addSubview:destinationController.view]; 
    [destinationController.view setFrame:CGRectOffset(frame, frame.size.width, 0)]; 

    [UIView animateWithDuration:0.5 animations:^{ 

     [sourceController.view setFrame:CGRectOffset(frame, -frame.size.width, 0)]; 

    } completion:^(BOOL finished) { 

     [sourceController presentViewController:destinationController animated:NO completion:nil]; 
     [destinationController.view removeFromSuperview]; 

    }]; 
} 

與此代碼類似,遍佈互聯網。問題在於動畫完成後「有時」屏幕閃爍/閃爍/閃爍然後恢復正常。

刪除[destinationController.view removeFromSuperview];代碼行似乎可以解決問題。但是,這看起來不正確!對?

任何想法如何解決這個問題?

+0

你解決了嗎?我有一個非常類似的實現相同的問題 – Chris

+0

我通過將子視圖控制器添加到一個父視圖控制器來解決它。當我想在控制器之間移動時,我將要移動的控制器添加到屏幕外。然後做動畫,然後刪除不需要的控制器。我不再繼承seglass。 – hasan83

回答

0

是的,只需刪除[destinationController.view removeFromSuperview];。它會爲你完成。在賽季結束時,destinationController.view將有一個新的超級觀點,將從sourceController.view中刪除。