2

我試圖從左邊,不正確的做出pushViewController幻燈片中,如下所示:背景中的CATransition白色閃光燈?

Page14Controller * controller = [[Page14Controller alloc] initWithNibName:@"Page14Controller" bundle:nil]; 

CATransition* transition = [CATransition animation]; 
transition.duration = 0.3; 
transition.type = kCATransitionPush; 
//    transition.type = kCATransitionMoveIn; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
//kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
transition.subtype = kCATransitionFromLeft; 
//kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 

[self.navigationController pushViewController:controller animated:NO]; 

當我這樣做時,電流控制器變淡白色,這看起來很可怕。爲什麼會發生?我已經嘗試將當前視圖的背景設置爲0.

回答

7

我想明白是什麼引起了白色閃光:它是主窗口的背景。將其設置爲alpha = 0有助於提高白色效果。它appears that kCATransitionPush actually fades the view being pushed off screen,很明顯,如果什麼是綠色,那麼它會褪色爲綠色。如果它不會消失,它會很好,但這是一個不同的問題。

+0

TY!我確實有一個鬼鬼祟祟的UIView,在那裏是白色的,最終導致了白色背景「噪音」。 – Kalle

+3

嗨,我有完全相同的問題,我試圖設置我的UIWindow alpha = 0的.backgroundColor,但它不能解決問題。你到底在幹什麼 ?謝謝。 – delannoyk

+0

這是發生在ios 7你如何解決? – Nisha

0

我會避免與UIViewController的視圖混淆太多。

更簡單的方法來實現你想要的是這樣的:

UINavigationController * nc = self.navigationController; 
NSArray * viewControllers = ; 
NSMutableArray * newControllers = [NSMutableArray arrayWithArray:[nc viewControllers]]; 
[newControllers insertObject:controller atIndex:newControllers.count-1]; 
nc.viewControllers = newControllers; 
[nc popViewControllerAnimated:YES]; 

注意,它取代用新的控制器,而不是僅僅將其推頂視圖控制器;這可能不是你想要的(但是如果你使用它來模擬頁面切換,你可能不想永遠推動更多的控制器,直到內存不足)。

+0

雖然我想推新控制器,但由於新控制器有一個後退按鈕,它會將其滑動到左側,恢復前一個控制器。 –

+0

如果你要做很多自定義的東西,那麼自己做所有的自定義轉換可能是值得的。例如,您可以設置view.frame。 –