Files
featherVoice/TUIKit/TUIChat/CommonUI/Camera/TUIMotionManager.m
2025-08-08 10:49:36 +08:00

62 lines
2.0 KiB
Objective-C

// Created by Tencent on 2023/06/09.
// Copyright © 2023 Tencent. All rights reserved.
#import "TUIMotionManager.h"
#import <CoreMotion/CoreMotion.h>
@import UIKit;
@interface TUIMotionManager ()
@property(nonatomic, strong) CMMotionManager *motionManager;
@end
@implementation TUIMotionManager
- (instancetype)init {
self = [super init];
if (self) {
_motionManager = [[CMMotionManager alloc] init];
_motionManager.deviceMotionUpdateInterval = 1 / 15.0;
if (!_motionManager.deviceMotionAvailable) {
_motionManager = nil;
return self;
}
__weak __typeof(self) weakSelf = self;
[_motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error) {
__strong __typeof(weakSelf) strongSelf = weakSelf;
[strongSelf performSelectorOnMainThread:@selector(handleDeviceMotion:) withObject:motion waitUntilDone:YES];
}];
}
return self;
}
- (void)handleDeviceMotion:(CMDeviceMotion *)deviceMotion {
double x = deviceMotion.gravity.x;
double y = deviceMotion.gravity.y;
if (fabs(y) >= fabs(x)) {
if (y >= 0) {
_deviceOrientation = UIDeviceOrientationPortraitUpsideDown;
_videoOrientation = AVCaptureVideoOrientationPortraitUpsideDown;
} else {
_deviceOrientation = UIDeviceOrientationPortrait;
_videoOrientation = AVCaptureVideoOrientationPortrait;
}
} else {
if (x >= 0) {
_deviceOrientation = UIDeviceOrientationLandscapeRight;
_videoOrientation = AVCaptureVideoOrientationLandscapeRight;
} else {
_deviceOrientation = UIDeviceOrientationLandscapeLeft;
_videoOrientation = AVCaptureVideoOrientationLandscapeLeft;
}
}
}
- (void)dealloc {
[_motionManager stopDeviceMotionUpdates];
}
@end