gpt4 book ai didi

ios6 - 检测 UIViewController 上的界面旋转,即使未在 - (NSUInteger)supportedInterfaceOrientations 中定义

转载 作者:行者123 更新时间:2023-12-04 14:30:36 24 4
gpt4 key购买 nike

我有一个 UIViewController 在主视图上处理几个 UIImageViews。底部是一个 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 中添加另一个要支持的界面方向时-method, View Controller 也会旋转。

即使只支持一个方向,如何检测 View Controller 的旋转?或者是否有另一种可能性来根据不断变化的设备方向旋转 UIViews?

谢谢你的帮助!

最佳答案

尝试使用 UIDevice 实例来检测设备物理方向的变化。
要开始接收通知,您可以使用类似这样的方法(例如在 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;
}
}

关于ios6 - 检测 UIViewController 上的界面旋转,即使未在 - (NSUInteger)supportedInterfaceOrientations 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com