我编写了一个具有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];
}
}
}
从长远来看,我认为您会更好,但您可以选择。