我有一个UIViewController在主视图上处理几个UI
ImageViews.在底部是一个UIToolbar,其中有几个项目可以与之交互.
现在,当我旋转设备时,我不希望viewController旋转,而只是UIImageViews.换句话说,底部的工具栏将位于左侧(或右侧),但imageViews将正确旋转.
所以,通过使用方法
- (BOOL)shouldAutoRotate { return YES; }
结合
- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; }
和
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { // rotate the image views here }
设备上的任何旋转都不会被执行,因为只支持一个接口方向(UIInterfaceOrientationMaskPortrait).但是当我在supportedInterfaceOrientations方法中添加另一个接口方向时,视图控制器也会旋转.
即使只支持一个方向,如何检测视图控制器的旋转?或者是否有另一种可能性根据不断变化的设备方向旋转UIViews?
谢谢你的帮助!
解决方法
尝试使用UIDevice实例来检测设备物理方向的变化.
要开始接收通知,您可以使用类似的内容(例如,在viewWillAppear:方法中):
要开始接收通知,您可以使用类似的内容(例如,在viewWillAppear:方法中):
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; //No reason to ask NSNotification because it many cases `userInfo` equals to //@{UIDeviceOrientationRotateAnimatedUserInfoKey = 1;} [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceDidRotate) name:@UIDeviceOrientationDidChangeNotification object:nil]; }
要取消注册接收设备旋转事件,请使用此选项(例如,在viewWillDisappear中):
- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; }
这是deviceDidRotate函数的一个例子:
- (void)deviceDidRotate { UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; switch (orientation) { case UIDeviceOrientationPortrait: case UIDeviceOrientationPortraitUpsideDown: // do something for portrait orientation break; case UIDeviceOrientationLandscapeLeft: case UIDeviceOrientationLandscapeRight: // do something for landscape orientation break; default: break; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。