每个UIViewController都有一个名为willRotateToInterface的方法。
是否可以在UIView中执行此操作?
这是否符合模型视图控制器的想法?
我能想到的唯一方法是将事件从UIViewController发送到UIView。
当前方向是否有全局变量?
答案 0 :(得分:17)
观察UIDeviceOrientationDidChangeNotification
:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
...
- (void)orientationDidChange:(NSNotification *)note
{
NSLog(@"new orientation = %d", [[UIDevice currentDevice] orientation]);
}
我应该注意,当您希望发送这些通知时,您可以添加-beginGeneratingDeviceOrientationNotifications
,并在希望它们停止时调用-endGeneratingDeviceOrientationNotifications
。生成这些产品会对电池产生影响,因此只有当您的视图在屏幕上时才会这样做。 UIViewController
为你完成所有这些,所以如果你有一个视图控制器,那么值得让它完成这项工作。
答案 1 :(得分:3)
如果您只想在方向更改时将视图调整为新尺寸/布局,则应该覆盖其layoutSubviews
方法。
只要视图大小发生变化,就会调用它,这通常在视图旋转时发生。
答案 2 :(得分:2)
您可以订阅全局通知并在设备轮换时接听电话,但它不会为您做任何事情。
[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:)
name:@"UIDeviceOrientationDidChangeNotification" object:nil];