我想创建一个在我调用shouldAutorotateToInterfaceOrientation时不会旋转的UIVIew,其他子视图将会旋转。
我希望保留shouldAutorotateToInterfaceOrientation支持,而不是使用通知。
感谢
答案 0 :(得分:3)
确保在旋转设备时让视图“不旋转”,准确定义您的意思。旋转可能意味着几件事,具体取决于您所指的坐标系。考虑它的更好方法就是简单地说,您希望每个设备方向的视图是什么样的。
提醒一下,shouldAutorotateTo ...会被系统发送到您的视图控制器。你不要自己调用它。它不会导致旋转。它允许系统询问您的视图控制器它支持的方向。
您的VC应对其支持的所有方向应答YES。支持的方向是视图更改布局以响应设备方向更改的方向,因此如果给定方向发生任何布局更改,则shouldAutorotateTo的答案可能为YES。
更改给定界面方向的子视图布局主要是您的责任。视图有一个autoresizingMask,它是一个位向量,用于描述相对于其父级的大小调整和定位的一些选项,这通常是足够的。完全控制方向变化布局的方法是实现willAnimateRotationToInterfaceOrientation。
例如,这是一个相当宽容的shouldAutorotate,只启用一个方向......
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
以下是如何控制旋转时子视图布局的方式......
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
UIView *testView = [self.view viewWithTag:16];
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
// change frames here to make the ui appear according to your spec
// including however you define "not rotating" for each view
self.subviewA.frame = .....
self.subviewB.frame = .....
} else {
self.subviewA.frame = .....
self.subviewB.frame = .....
}
}
答案 1 :(得分:0)
如果你想让一个UIView不按方向旋转,一个简单的解决方案就是将这个视图添加到Application top Window。因为窗口不随设备方向旋转。
[[[[UIApplication sharedApplication]windows]objectAtIndex:0]addSubview:customView];