旋转时视图移动到位

时间:2011-03-25 13:50:35

标签: uiview uiviewcontroller uipickerview

我创建了一个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:

第一次肖像enter image description here

旋转到横向enter image description here

回到肖像enter image description here

如果我重复轮换过程,事情会变得更糟。我做错了什么?

源代码在这里:http://dl.dropbox.com/u/3978473/forums/Rotator.zip

提前致谢!

2 个答案:

答案 0 :(得分:1)

要解决偏移问题,请重写displayView:方法,如下所示。

- (void)displayView:(UIView *)aView {     self.view = aView; }

然而,旋转很奇怪。你应该检查那部分代码。 使用UIViewController旋转方法

  • (无效)willRotateToInterfaceOrientation:持续时间:
  • (无效)didRotateFromInterfaceOrientation:

而不是 - (void)deviceDidRotate:

更简单,你会避免那种奇怪的弹跳,你不再需要通知了。 请阅读上面指定的方法的苹果文档。

希望这有帮助。

答案 1 :(得分:0)

好的,我发现了错误。它非常简单和愚蠢:我混合了框架和边界。

在displayView:code中,我将子视图的框架设置为父视图的框架,当它应该是父视图的边界时。