在获得miamk的支持回答之后,我向实现我想要的东西迈进了一步..但现在有以下问题:
我有一个iPad应用程序,可用于所有四种视图模式(纵向上/下和横向左/右)。但在某个时刻,我有一个我只希望在风景模式中看到的视图。所以我在UIViewController中执行以下操作,触发操作以查看仅横向视图:
- (void) showProperty:(Property *) property {
if ([self interfaceOrientation] == UIInterfaceOrientationLandscapeLeft || [self interfaceOrientation] == UIInterfaceOrientationLandscapeRight) {
PropertyViewController *propertyView = [[PropertyViewController alloc] initWithNibName:@"PropertyViewController" bundle:[NSBundle mainBundle]];
propertyView.property = property;
[self.navigationController pushViewController:propertyView animated:YES];
[propertyView release];
propertyView = nil;
}
else {
RotateDeviceViewController *rotateView = [[RotateDeviceViewController alloc] initWithNibName:@"TabRotate" bundle: [NSBundle mainBundle]];
rotateView.property = property;
[self.navigationController pushViewController:rotateView animated:YES];
[rotateView release];
rotateView = nil;
}
}
这很好用,因此当iPad以横向模式保持时显示所需的屏幕(PropertyViewController),如果没有,则显示RotateDeviceViewController,向用户显示他/她应该正确旋转设备的消息查看屏幕。
这样有效!
然后问题出现在 RotateDeviceViewController ..我有以下内容:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
[self showProperty];
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
- (void) showProperty {
PropertyViewController *propertyView = [[PropertyViewController alloc] initWithNibName:@"PropertyViewController" bundle:[NSBundle mainBundle]];
propertyView.property = property;
[self.navigationController pushViewController:propertyView animated:YES];
[propertyView release];
}
因此,只要我将设备(查看 RotateDeviceViewController )旋转到横向模式,我就会向用户显示 PropertyViewController 。这有效...但是当 PropertyViewController 出现时,它显示我的布局旋转了90度。所以基本上它以纵向模式显示内容,而不是使用横向模式(这实际上是您持有设备的方式)..
我希望这是有道理的,有人可以告诉我是什么导致了这一点。
答案 0 :(得分:1)
@ MacN00b的答案更优雅的解决方法(至少在设计方面)是设置一个纵向视图,其中包含一条消息,告诉用户他应该旋转设备,只有当他旋转它时才显示视图为景观而建。
老实说,当用户仍处于纵向方向时,我认为所有内容都已经旋转,这很难看。
答案 1 :(得分:1)
您可以使用以下方式收听方向更改:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
然后通过加载适当的视图来回应那些......
- (void) orientationChanged:(id)object
{
UIInterfaceOrientation interfaceOrientation = [[object object] orientation];
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
self.view = self.portraitView;
}
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
self.view = self.landscapeView;
}
}
如果这是针对相关屏幕的专用UIView子类,您可以使portraitView包含一个标签,通知用户旋转屏幕以查看内容,然后使横向视图包含您的实际内容。
我目前在应用中执行此操作,并且两个视图都包含在一个笔尖中。请确保为每个视图在IB中的视图属性上设置方向...
答案 2 :(得分:-1)
试试这个:
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
希望这有帮助。