在我的UISplitViewController中,我希望主視圖控制器只允許在縱向或當我的詳細視圖控制器不顯示控制器類型時顯示,MyFullScreenViewController
。我已經實現了UISplitViewControllerDelegate以適當地指出這一點。UISplitViewController的主細節控制器的動畫可見性
-(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:
,但我懷疑他們不應允許視圖控制器爲響應該消息而對其進行動畫更改。但是,如果它們落在動畫塊之外,則主視圖控制器有時會消失。
爲了得到當前的方向,你應該使用UIInterfaceOrientation方向= [[UIApplication的sharedApplication] statusBarOrientation]而不是[[的UIDevice currentDevice]取向] – ullstrm