【发布时间】:2013-10-31 20:31:46
【问题描述】:
在我的 UISplitViewController 中,我希望只允许主视图控制器在纵向或我的详细视图控制器不显示控制器类型MyFullScreenViewController 时显示。我已经实现了 UISplitViewControllerDelegate 来适当地指出这一点。
-(BOOL)splitViewController:(UISplitViewController *)svc
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation
{
if (UIInterfaceOrientationIsPortrait(orientation) ||
[[self.navigationController topViewController] isKindOfClass:[MyFullScreenViewController class]])
{
return YES;
}
return NO;
}
但是,UISplitViewController 仅在旋转期间调用委托。所以MyFullScreenViewController 实现了viewWillAppear:animated 和viewWillDisappear:animated。
- (void)viewWillAppear:(BOOL)animated
{
[self fakeRotationOfSplitViewController];
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[self fakeRotationOfSplitViewController];
[super viewWillDisappear:animated];
}
-(void)fakeRotationOfSplitViewController
{
UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
CGFloat duration = 1.0f;
CGFloat fakeDuration = 0.0f;
[UIView animateWithDuration:duration
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
[[self splitViewController] willAnimateRotationToInterfaceOrientation:orientation
duration:fakeDuration];
[[self splitViewController] willRotateToInterfaceOrientation:orientation
duration:fakeDuration];
[[self splitViewController] didRotateFromInterfaceOrientation:orientation];
} completion:^(BOOL finished) {
}];
}
除动画外,一切正常。主视图控制器在UINavigationController 对象推送之前和弹出动画之前立即消失并重新出现。
文档不清楚是否应该在动画块中调用 willRotateToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation:,但我怀疑它们不应该允许视图控制器为响应消息而更改动画。但是,如果它们落在动画块之外,主视图控制器有时会消失。
【问题讨论】:
标签: ios objective-c uikit uisplitviewcontroller