【问题标题】:Handling rotation and adjusting views programmatically (Xcode)以编程方式处理旋转和调整视图 (Xcode)
【发布时间】:2013-10-30 21:45:31
【问题描述】:

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

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

在这个方法中,我调用了一个调整所有元素的函数。该函数所做的只是遍历我的所有视图并为每个视图设置新的CGRect。它适用于纵向(上下),但一旦我将方向更改为水平,它就会裁剪。

两个问题:

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

【问题讨论】:

  • 好吧,如果它们被裁剪,您显然没有将它们设置为正确的CGRects。这也是 stuts/springs 和 autolayout 的设计目的。看看这些,看看它们是否适合您的需求。
  • 不建议在 iPhone 上允许倒置视图,只是让您知道。但正如@Firo 指出的那样,您可能没有正确设置您的CGRects。您可以使用struts/springs 以便自动布局可以正确处理旋转,而无需以编程方式执行任何操作。
  • 您的目标是 IOS 5.1 还是早期版本,如果是,您可以使用 AutoResizingMasks 来调整视图,如果您的目标是 IOS 6.0 或更高版本,您应该使用 AutoLayout。对于某些视图,您必须手动设置框架。
  • 大家好!谢谢你的cmets。我会检查struts/springs。我要提到的另一件事是,当我在调整大小后为CGRects 执行NSLog 时,它们在技术上似乎还可以。因此,如果我将 iPad 从纵向旋转到横向,当我执行 NSLog 时,全屏子视图的 CGRect 表示它已从 (0,0,768,1024) 更改为 (0,0,1024,768)。但是,裁剪区域看起来坐标系没有改变......是否有意义? (我没有足够的业力点来上传图片,否则我肯定会)。

标签: ios objective-c uiview


【解决方案1】:

我认为您缺少关键部分。当您在视图加载时将框架设置为纵向视图时,视图得到了框架,但是当它更改为横向时它会改变,但是从那里我认为您没有设置纵向视图的框架。使用通知

[[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
        }
    }];
}

【讨论】:

  • 为什么不直接覆盖willAnimateRotationToInterfaceOrientation:duration:?如果您想在视觉UIViewController 中处理旋转,这样做有什么好处吗?
  • 我发现在某些情况下列出通知更好,但我认为没有其他好处
猜你喜欢
  • 1970-01-01
  • 2021-04-09
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多