以编程方式处理旋转和调整视图(Xcode)

时间:2013-10-30 13:17:18

标签: ios objective-c uiview

这是我一直在努力解决的问题:

我正在使用loadView以编程方式创建view。 一旦加载它在Portrait视图中看起来很棒。但是,我想处理设备的旋转。因此我使用willAnimateRotationToInterfaceOrientation方法。

在这个方法中,我调用一个调整所有元素的函数。该函数所做的只是浏览我的所有视图,并为每个视图设置新的CGRect。它在纵向方向(向上和向上)上工作得很好,但是一旦我将方向改为水平方向,就会裁剪。

两个问题:

  1. 这种行为最可能的原因是什么?
  2. 如果不为水平/垂直方向创建单独的视图,您会建议如何处理设备旋转?

1 个答案:

答案 0 :(得分:0)

我认为你错过了关键部分。当您在纵向视图中设置框架时,视图确实加载,视图获得了框架,但当它更改为横向时,它会再次从那里更改,我认为您没有为纵向视图设置框架。使用通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];


-(void) orientationChanged:(NSNotification *)notification
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{

        UIDeviceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

        if((orientation == UIDeviceOrientationPortrait) || (orientation == UIDeviceOrientationPortraitUpsideDown)) {
           // set frame here
        }else if ((orientation == UIDeviceOrientationLandscapeLeft) || (orientation == UIDeviceOrientationLandscapeRight)){
          // set frame here too
        }
    }];
}