繁体   English   中英

视图旋转不正确

[英]View isn't rotating properly

我在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的帧仍然是。

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

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

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

确保视图控制器的视图的autoresizesSubviews视图的autoresizesSubviews设置为YES并且添加的任何子视图都具有适当的autoresizingMask

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM