我在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的框架仍然存在,原因不明。
答案 0 :(得分:0)
您的视图/控制器层次结构是什么样的?它看起来像是在你的视图上设置90°旋转变换,而不是改变视图的框架。如果您自己没有这样做,那么它可能是父视图或视图控制器。
答案 1 :(得分:0)
框架和边界是非常不同的东西。你应该阅读Apple的View Geometry指南 - 它包含了许多对我来说非常宝贵的信息。
您的界限总是为320x480,因为有人正在设置您的transform
(影响frame
,但不影响bounds
)。
确保您的视图控制器视图的超级视图的autoresizesSubviews
设置为YES
,并且添加的所有子视图都具有相应的autoresizingMask
。