gpt4 book ai didi

ios - 如何在没有[UIDevice setValue:forKey:@“orientation”]的情况下更改UI方向

转载 作者:行者123 更新时间:2023-12-01 18:07:14 25 4
gpt4 key购买 nike

我的目标是使用按钮更改锁定/解锁方向。在锁定模式下,可以通过按钮切换方向,而在解锁模式下,可以通过传感器确定方向。
我尝试使用[[UIDevice currentDevice] setValue:[NSNumber numberWithInt:orientation] forKey:@"orientation"]实现此功能,但是此代码有问题。
假设当前我的应用是“锁定模式,人像界面,人像设备”。然后,我将设备旋转到左侧,并解锁方向。我期望[[UIDevice currentDevice] orientation]应该是UIDeviceOrientationLandscapeLeft。但是,尽管实际设备处于横向状态,但其值为UIDeviceOrientationPortrait!

我也尝试了下面的代码与通知中心。

[[NSNotificationCenter defaultCenter]  
addObserver:self
selector:@selector(onDeviceOrientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];

但是此代码无法正常工作。如果设备处于横向且UI方向通过 [[UIDevice currentDevice] setValue:[NSNumber numberWithInt:UIDeviceOrientationPortrait]设置为纵向,则在将设备旋转至纵向时不会调用 onDeviceOrientationChanged。我认为设备的方向值已设置为纵向(通过我的代码,而不是传感器)。

ps。当然,我检查了 必需的全屏选项。

编辑:知道如何获得不受 [[UIDevice currentDevice] setValue]影响的设备的真实方向也是一个很好的答案。

最佳答案

我使用MotionManager解决了这个问题。当我锁定(或更改)方向时,像往常一样足够[[UIDevice currentDevice] setValue:[NSNumber numberWithInt:orientation] forKey:@"orientation"]
但是,当我解锁方向时,我使用MotionManager和以下代码刷新了方向。

CMMotionManager motionManager = [[CMMotionManager alloc] init];

[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
[motionManager stopAccelerometerUpdates];

CMAcceleration acceleration = accelerometerData.acceleration;
UIInterfaceOrientation orientation;
if (acceleration.x >= 0.75) {
orientation = UIInterfaceOrientationLandscapeLeft;
} else if (acceleration.x <= -0.75) {
orientation = UIInterfaceOrientationLandscapeRight;
} else if (acceleration.y <= -0.75) {
orientation = UIInterfaceOrientationPortrait;
} else if (acceleration.y >= 0.75) {
orientation = UIInterfaceOrientationPortraitUpsideDown;
} else {
return;
}
[[UIDevice currentDevice] setValue:[NSNumber numberWithInt:orientation]
forKey:@"orientation"];
[UINavigationController attemptRotationToDeviceOrientation];
}];

当然,您应该知道 supportedInterfaceOrientationsshouldAutorotate方法。

关于ios - 如何在没有[UIDevice setValue:forKey:@“orientation”]的情况下更改UI方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775858/

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