我编写了一个具有UIViewController的应用程序,该应用程序在纵向模式下显示另一个UIViewController,在横向模式下显示另一个UIViewController。

当我去风景时,我将在绘图/放置东西,因此我需要获取风景坐标。以下是在iPhone旋转时触发新视图的代码。下面的代码是如何加载此视图的。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x
  duration:(NSTimeInterval)duration
{
if (UIInterfaceOrientationIsPortrait(x))
{
    NSLog(@"Going Portrait");

} else if (UIInterfaceOrientationIsLandscape(x))
{
    NSLog(@"Going Landscape");
    if (activeView != [graphViewController view])
    {
        [containerView addSubview:[graphViewController view]];
    }
}
}


我的问题是

-(void)loadView {
CGRect screenBounds = [[UIScreen mainScreen] bounds];
NSLog(@"GraphViewController: Screenbounds %@", NSStringFromCGRect(screenBounds));
}


在GraphViewController返回时,将产生:GraphViewController:屏幕绑定{{0,0},{320,480}}

这不是景观的原点,因此我的绘画是不正确的。
如何使GraphViewController调用[UIScreen mainScreen] bounds]时具有正确的坐标?

非常感谢

麦克风

最佳答案

我认为您的问题在于所建立的层次结构。听起来像是当您添加第二个视图控制器时,它认为它是纵向模式(即使您处于横向)。我认为解决您的问题的方法是实施

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation


主视图控制器和graphviewcontroller中的方法。

但是,我认为这不是走下坡路的好途径。您是否有特定原因要使用uiviewcontrollers而不是仅使用uiviews来显示不同的界面?

如果可以直接进入UIViews,然后执行类似

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)x
  duration:(NSTimeInterval)duration
{
   if (UIInterfaceOrientationIsPortrait(x))
   {
       NSLog(@"Going Portrait");

   }
   else if (UIInterfaceOrientationIsLandscape(x))
   {
       NSLog(@"Going Landscape");
       if (activeView != graphView)
       {
           containerView = graphView;
           //OR
           [containerView addSubview:graphView];
       }
   }
}


从长远来看,我认为您会更好,但您可以选择。

10-04 16:21