62 lines
2.0 KiB
Objective-C
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
|