iOS:NIB之间的AutoRotating

时间:2010-09-25 12:03:28

标签: iphone ios xib

我的通用应用是一个全屏视图。按下按钮可翻转以显示设置页面:

- (void) showSettings
{
FlipsideViewController * flipsideVC = [FlipsideViewController alloc];

NSString * settingsNib;
if ( isIPad() )
    settingsNib = isCurrentlyPortrait() ? @"settings_iPad_portrait" : @"settings_iPad_landscape";
else
     settingsNib = @"settings_iPhone";

[flipsideVC initWithNibName: settingsNib
                     bundle: nil ];

flipsideVC.delegatePointingToMainVC = self;

flipsideVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController: flipsideVC 
                        animated: YES ];

[flipsideVC release];
}

并且设置页面调用委托方法:我根据更改的设置重新创建主视图,然后翻转。

- (void) settingsDidQuit:(FlipsideViewController *) flipsideVC 
{
[self createOrRecreateWheelView];
[self dismissModalViewControllerAnimated: YES];
}

但是如果用户在设置页面上旋转iPad会怎么样? Apple宣布我的应用必须处理这个问题。但是怎么做呢?我可以为设置页面动态加载新的XIB吗?

我看不到这样做的方法,所以我尝试的方法是在设置视图中捕捉旋转,...

- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation 
{
[self.delegatePointingToMainVC settingsOrientationChanged]; 
}

...并回调主视图控制器,它会解散设置视图控制器并根据当前方向重新创建它。

- (void) settingsOrientationChanged
{
[self dismissModalViewControllerAnimated: YES];
[self showSettings];
}

直接存在一个微不足道的问题 - 当设置页面加载时,didRotateFromInterfaceOrientation会自动触发。我可以通过在init中将boolean设置为false并进行修改来阻止这种情况:

- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation 
{
if (initialized)
    [self.delegatePointingToMainVC settingsOrientationChanged]; 

initialized = true;
}

这种方法的问题是我导航到设置页面,旋转设备,并在点击返回主视图之前暂时显示正确的设置页面。

我认为这里存在一个线程问题。但也许我的整个方法都是错误的。有人可以提出更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解这个问题。您希望设置视图(从NIB加载)自动旋转吗?您应该在 shouldAutorotateToInterfaceOrientation:中为您希望自动旋转的方向返回YES,并根据您的需要设置XIB内部视图的自动调整掩码。

无需回叫主视图控制器并告诉他按下新的设置视图控制器。视图的旋转行为由每个视图的自动调整掩码属性以及相关视图控制器的 shouldAutorotateToInterfaceOrientation:方法的实现确定。但是,如果想要更高级的动画,可以在 willRotateToInterfaceOrientation:duration: didRotateFromInterfaceOrientation:方法中设置和管理它们。

相关问题