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

应用程序设置为通过其Info.plist文件以开始在横向模式。

我有两个视图控制器: FirstViewControllerSecondViewController

有关每个这些我有一个笔尖文件,其中该视图处于横向。两个视图控制器被添加到我的MainView笔尖作为网点,并将他们的意见延迟初始化。

当应用程序加载时,第一视图显示在风景,如所预期。然而,当我切换到所述第二视图,所述装置(或模拟器)保持在风景,但视图旋转时,如果该设备是处于纵向模式,制动我的接口。

在两者UIViewController类我有以下代码:

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

和切换视图,在我的应用程序委托我做的:

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

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

这是第二视图看起来如何在IB: 替代文字http://img27.imageshack.us/img27/4898/picture1ni.png

,这是它的外观在模拟器: 替代文字http://img402.imageshack.us/img402/4866/picture2wt.png

这是为什么第二视图是在风景,但与所述界面中显示旋转Θ

我不希望处理转换属性,因为这似乎矫枉过正。

有帮助吗?

解决方案

我出演这个问题,希望有人会给你一个有见地的回应,我会学到一些东西..可惜我怕你可能需要使用转换得到这个正常工作。这是我一直在使用最近解决问题的代码:

- (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);
}

我很想听到替代解决方案,如果这还不是全部必要的。还有一点要注意,我在此设置注意:如果你有意见之间的过渡,而你这一转变过程中旋转手机,这是可能的观点取向得到翻转或在错误的横向“卡壳”,这样的你需要为你的观点之间导航,打开手机上(景观右VS景观左)。

其他提示

,这只是一个建议,但可以尝试在shouldAotorotate方法返回NO为第二视图。或者尽量使其在IB纵向视图。看来,你的看法是正确加载(在风景模式),但随后收到shouldAutorotate消息,并已被旋转90度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top