2

我正在尝试让 pushViewController 从左侧滑入,而不是从右侧滑入,如下所示:

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];

当我这样做时,当前控制器会变成白色,这看起来很糟糕。为什么会这样?我尝试将当前视图的 alpha 的背景设置为 0。

4

2 回答 2

7

我弄清楚显然是什么导致了白色闪烁:它是主窗口的背景。将此设置为 alpha=0 有助于白色效果。看起来kCATransitionPush实际上淡化了被推离屏幕的视图,显然如果下面是绿色的,那么它会淡化为绿色。如果它不褪色就好了,但这是一个不同的问题。

于 2011-06-23T05:42:51.260 回答
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];

请注意,它用新控制器替换了顶视图控制器,而不仅仅是推送它;这可能不是您想要的(但如果您使用它来模拟页面更改,您可能不希望永久推送更多控制器,直到内存不足)。

于 2011-06-22T03:47:40.980 回答