【问题标题】:View isn't rotating properly视图未正确旋转
【发布时间】:2012-07-12 16:24:53
【问题描述】:

我在 UIViewController 子类中有这段代码:

- (id)init {
    self = [super init];

    if (self) {            
        self.view.frame = [PDToolbox screenFrame];
        self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

        self.view.backgroundColor = [UIColor redColor];
    }

    return self;
}

就任何旋转方法而言,我唯一拥有的是:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}

然而在屏幕旋转到横向后,在视图上执行 NSLog 会显示:

<UIView: 0x10061640; frame = (0 0; 320 480); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x10061670>>

我不明白它为什么要做这种变换,而不是像往常一样旋转?这意味着我在旋转后放置在其顶部并设置为视图大小的任何视图最终都位于 320x480 位置。

编辑:

人们不理解。所以我在它上面放了一个视图,大小和 UIView 一样,使用:

UIView *anotherView = [UIView alloc] initWithFrame:controller.view.bounds];
[controller.view addSubview:anotherView];

如果我以纵向添加另一个视图,则另一个视图以纵向显示,框架为 320x480。

如果我在横向中添加 anotherView,anotherView 会出现在横向中,但仍具有 320x480 的框架,因为出于某种未知原因,controller.view 的框架仍然如此。

【问题讨论】:

  • 你能把你的 UIViewCONtroller 的完整代码贴出来吗
  • @RA 当然。刚刚完成。
  • 其实我不明白你的问题..这是什么意思?“我在旋转后放置在它上面的视图并设置为视图的大小最终位于 320x480 位置”
  • 您是直接将此视图添加到窗口中还是什么?这是一种非常奇怪的行为,通常由您的视图控制器层次结构(正确地)管理。

标签: iphone objective-c ios uiview rotation


【解决方案1】:

您的视图/控制器层次结构是什么样的?在我看来,某些东西正在您的视图上设置 90° 旋转变换,而不是更改视图的框架。如果您自己不这样做,则可能是父视图或视图控制器。

【讨论】:

  • 它是 UIViewController 的直接子类。
  • 我不是指你的 UIViewController 类的类层次结构,我是指你的应用程序的视图层次结构。控制器的视图是嵌入在另一个视图中还是直接放置在应用程序的 UIWindow 中?
  • 是UIViewController自带的普通视图。尚未修改。
  • 是的,但是您将其放置在什么视图中?它是否出现在 UINavigationController 的自定义子类中?
【解决方案2】:

框架和边界是非常不同的东西。您应该阅读 Apple 的 View Geometry 指南 - 它包含许多对我来说非常宝贵的信息。

您的边界始终为 320x480,因为有人在设置您的 transform(这会影响 frame,但不会影响 bounds)。

确保您的视图控制器的视图的父视图将autoresizesSubviews 设置为YES,并且添加的任何子视图都具有适当的autoresizingMasks。

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多