Iphone iOS:在NIB之间自动旋转
我的通用应用程序是一个单一的全屏视图。按下按钮将翻转显示设置页面:Iphone iOS:在NIB之间自动旋转,iphone,ios,xib,Iphone,Ios,Xib,我的通用应用程序是一个单一的全屏视图。按下按钮将翻转显示设置页面: - (void) showSettings { FlipsideViewController * flipsideVC = [FlipsideViewController alloc]; NSString * settingsNib; if ( isIPad() ) settingsNib = isCurrentlyPortrait() ? @"settings_iPad_portrait" : @"settings_
- (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怎么办?苹果规定我的应用程序必须处理这个问题。但如何做到这一点呢?我可以为设置页面动态加载新的XIB吗
我看不到这样做的方法,所以我尝试的解决方案是捕捉设置视图中的旋转
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation
{
[self.delegatePointingToMainVC settingsOrientationChanged];
}
…并调用主视图控制器,它将分解设置视图控制器并根据当前方向重新创建它
- (void) settingsOrientationChanged
{
[self dismissModalViewControllerAnimated: YES];
[self showSettings];
}
有一个简单的问题——当设置页面加载时,会自动触发didRotateFromInterfaceOrientation。我可以通过在init中将布尔值设置为false来防止这种情况,并修改如下:
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation
{
if (initialized)
[self.delegatePointingToMainVC settingsOrientationChanged];
initialized = true;
}
这种方法的问题是,我导航到设置页面,旋转设备,它会立即显示正确的设置页面,然后弹回到主视图
我认为这里有一个线程问题。但也许我的整个方法都错了。有人能提出更好的解决方案吗?我不确定我是否理解这个问题。是否要将设置视图(从NIB加载)设置为自动旋转?对于要在shouldAutorotateToInterfaceOrientation:中执行自动旋转的方向,只需返回YES,并根据需要设置XIB内部视图的自动调整大小掩码 无需回调主视图控制器并告诉他推送一个新的设置视图控制器。视图的旋转行为由每个视图的自动调整大小遮罩属性以及关联视图控制器的shouldAutorotateToInterfaceOrientation:方法的实现决定。不过,如果你想制作更高级的动画,你可以在willRotateToInterfaceOrientation:duration:和didRotateFromInterfaceOrientation:methods中设置和管理它们。谢谢——这对我的情况非常有效,因为当我转动设备时,我的实际布局设计不会改变——只有比例和间距。