我正在根据视图控制器上的iOS文档编写一个自定义视图控制器容器,我正在努力寻找一种优雅的方式来呈现第一个视图控制器,它也会自动转发相关的显示消息,如viewWillAppear:.
当我尝试transitionFromViewController:toViewController:duration:options:animations:completion:with fromViewController:as nil我得到一个错误.我已经使用UIView动画块将视图设置为视图层次结构的动画.这似乎打破了外观方法的自动转发,这意味着我有责任在适当的时候调用viewWillAppear:和ViewDidAppear :.是否有更有效的方法将第一个视图转换到处理外观和旋转方法的屏幕?
我的代码在第一个视图控制器中看起来有点像动画.
self.visibleViewController = [[UIViewController alloc] init];
[self addChildViewController:self.visibleViewController];
[self.visibleViewController viewWillAppear:YES];
[self.visibleViewController.view setAlpha:0];
[self.view addSubview:self.visibleViewController.view];
[UIView animateWithDuration:0.5
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
self.visibleViewController.view.alpha = 1;
}
completion:^(BOOL finished){
[self.visibleViewController viewDidAppear];
[self.visibleViewController didMoveToParentViewController:self];
}];
最佳答案 答案就在那里一直隐藏在文档中.
UIViewController的文档是
– (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)动画
和同伴
– (void)endAppearanceTransition
他们的文档说永远不要从你自己的代码调用viewWillAppear等.您可以使用这些方法正确关闭链条.