我编写了一个应用程序,它有一个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]边界时具有正确的坐标]; ?
非常感谢
麦克
答案 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];
}
}
}
我认为从长远来看,你会更好,但是你的选择。