去景观时不会改变

时间:2011-02-14 23:01:58

标签: iphone uiview uiviewcontroller uiinterfaceorientation

我编写了一个应用程序,它有一个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:Screenbounds {{0,0},{320,480}}

这不是景观的共同点,因此我的绘图是不正确的。 我怎样才能使GraphViewController在调用 [UIScreen mainScreen]边界时具有正确的坐标];

非常感谢

麦克

1 个答案:

答案 0 :(得分:1)

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

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

我认为从长远来看,你会更好,但是你的选择。