视图旋转不正常

时间:2012-07-12 16:24:53

标签: iphone objective-c ios uiview rotation

我在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。

如果我在横向中添加另一个视图,另一个视图将以横向显示,但仍然使用框架320x480,因为这是控制器.view的框架仍然存在,原因不明。

2 个答案:

答案 0 :(得分:0)

您的视图/控制器层次结构是什么样的?它看起来像是在你的视图上设置90°旋转变换,而不是改变视图的框架。如果您自己没有这样做,那么它可能是父视图或视图控制器。

答案 1 :(得分:0)

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

您的界限总是为320x480,因为有人正在设置您的transform(影响frame,但不影响bounds)。

确保您的视图控制器视图的超级视图的autoresizesSubviews设置为YES,并且添加的所有子视图都具有相应的autoresizingMask