我创建了一个UIViewController(基于How to switch views when rotating),在设备旋转时在两个视图之间切换。每个视图对于特定方向都是“专门的”。
它使用UIDeviceOrientationDidChangeNotification通知来切换视图:
-(void) deviceDidRotate: (NSNotification *) aNotification{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
NSLog(@"Device rotated to %d!", orientation);
if ((orientation == UIDeviceOrientationPortrait) ||
(orientation == UIDeviceOrientationPortraitUpsideDown)) {
[self displayView:self.portraitViewController.view];
}else if ((orientation == UIDeviceOrientationLandscapeLeft) ||
(orientation == UIDeviceOrientationLandscapeRight)) {
[self displayView:self.landscapeViewController.view];
}
}
和一些作品。当我旋转到Landscape然后再回到Portrait时出现问题。回到肖像时,子视图不会显示在正确的位置,特别是UIPickerView:
第一次肖像:
旋转到横向:
回到肖像:
如果我重复轮换过程,事情会变得更糟。我做错了什么?
源代码在这里:http://dl.dropbox.com/u/3978473/forums/Rotator.zip
提前致谢!
答案 0 :(得分:1)
要解决偏移问题,请重写displayView:方法,如下所示。
- (void)displayView:(UIView *)aView { self.view = aView; }
然而,旋转很奇怪。你应该检查那部分代码。 使用UIViewController旋转方法而不是 - (void)deviceDidRotate:
更简单,你会避免那种奇怪的弹跳,你不再需要通知了。 请阅读上面指定的方法的苹果文档。
希望这有帮助。
答案 1 :(得分:0)
好的,我发现了错误。它非常简单和愚蠢:我混合了框架和边界。
在displayView:code中,我将子视图的框架设置为父视图的框架,当它应该是父视图的边界时。