仅横向使用多个笔尖的iPhone应用程序

时间:2009-12-11 22:50:14

标签: iphone landscape

我正在开发一个有几个笔尖的iPhone应用程序,应该只是风景。

应用程序设置为通过Info.plist文件以横向模式启动。

我有两个视图控制器: FirstViewControllerSecondViewController

对于其中的每一个,我都有一个nib文件,其中视图是横向的。两个视图控制器都作为插件添加到我的MainView笔尖中,并且他们的视图被懒惰地初始化。

加载应用程序时,第一个视图按预期显示在横向中。但是,当我切换到第二个视图时,设备(或模拟器)保持横向,但视图旋转,就像设备处于纵向模式,制动我的界面。

UIViewController个类中,我有以下代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return interfaceOrientation == UIInterfaceOrientationLandscapeRight;
}

并切换视图,在我的app委托中我正在做:

[viewController.view removeFromSuperview];
[window addSubview:secondViewController.view];

其中viewControllersecondViewController是视图控制器连接的两个出口。

这是第二个视图在IB中的显示方式: alt text http://img27.imageshack.us/img27/4898/picture1ni.png

这就是它在模拟器中的样子: alt text http://img402.imageshack.us/img402/4866/picture2wt.png

为什么第二个视图在横向显示但是界面已旋转?

我不想处理转换属性,因为这似乎有点过分了。

2 个答案:

答案 0 :(得分:3)

我主演了这个问题,希望有人会给你一个富有洞察力的回应,我会学到一些东西......遗憾的是,我担心你可能需要使用变换才能让它正常工作。这是我最近用来解决问题的代码:

- (void)forceLandscapeForView:(UIView *)theView {
  theView.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
  theView.bounds = CGRectMake(0, 0, 480, 320);
  theView.center = CGPointMake(160, 240);
  [theView setNeedsLayout];
  [theView setNeedsDisplay];
}

然后,当您添加新视图时,请检查当前方向,并在必要时强制旋转:

if (!UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
  [self forceLandscapeForView:_activeViewController.view];
}

当然,您需要在每个视图控制器中对shouldAutorotateToInterfaceOrientation做出适当的响应:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

如果不是全部必要,我很乐意听到其他解决方案。我已经注意到这个设置还有一个警告:如果你在视图之间有一个过渡,并且你在转换过程中旋转手机,那么视图方向可能会被翻转或“卡住”在错误的横向方向上,例如在视图之间导航时,您需要将手机翻过来(横向右侧与横向左侧)。

答案 1 :(得分:0)

这只是一个建议,但您可以尝试在第二个视图的shouldAotorotate方法中返回NO。或者尝试在IB中的纵向视图中进行制作。您的视图似乎已正确加载(在横向模式下),但随后收到了shouldAutorotate消息并已旋转了90度。