extract sensor checker to a separate class
This commit is contained in:
parent
8f252aa687
commit
f7524c20ce
|
@ -11,6 +11,7 @@
|
||||||
4107014D1ACB732B00C6AA39 /* RCTCamera.m in Sources */ = {isa = PBXBuildFile; fileRef = 410701481ACB732B00C6AA39 /* RCTCamera.m */; };
|
4107014D1ACB732B00C6AA39 /* RCTCamera.m in Sources */ = {isa = PBXBuildFile; fileRef = 410701481ACB732B00C6AA39 /* RCTCamera.m */; };
|
||||||
4107014E1ACB732B00C6AA39 /* RCTCameraManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4107014A1ACB732B00C6AA39 /* RCTCameraManager.m */; };
|
4107014E1ACB732B00C6AA39 /* RCTCameraManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4107014A1ACB732B00C6AA39 /* RCTCameraManager.m */; };
|
||||||
454EBCF41B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 454EBCF31B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m */; };
|
454EBCF41B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 454EBCF31B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m */; };
|
||||||
|
9FE592B31CA3CBF500788287 /* RCTSensorOrientationChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FE592B21CA3CBF500788287 /* RCTSensorOrientationChecker.m */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
@ -34,6 +35,8 @@
|
||||||
410701491ACB732B00C6AA39 /* RCTCameraManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCameraManager.h; sourceTree = "<group>"; };
|
410701491ACB732B00C6AA39 /* RCTCameraManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTCameraManager.h; sourceTree = "<group>"; };
|
||||||
4107014A1ACB732B00C6AA39 /* RCTCameraManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTCameraManager.m; sourceTree = "<group>"; };
|
4107014A1ACB732B00C6AA39 /* RCTCameraManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTCameraManager.m; sourceTree = "<group>"; };
|
||||||
454EBCF31B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+ImageMetadata.m"; sourceTree = "<group>"; };
|
454EBCF31B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+ImageMetadata.m"; sourceTree = "<group>"; };
|
||||||
|
9FE592B11CA3CBF500788287 /* RCTSensorOrientationChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTSensorOrientationChecker.h; sourceTree = "<group>"; };
|
||||||
|
9FE592B21CA3CBF500788287 /* RCTSensorOrientationChecker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTSensorOrientationChecker.m; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -50,6 +53,8 @@
|
||||||
410701241ACB719800C6AA39 = {
|
410701241ACB719800C6AA39 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
9FE592B11CA3CBF500788287 /* RCTSensorOrientationChecker.h */,
|
||||||
|
9FE592B21CA3CBF500788287 /* RCTSensorOrientationChecker.m */,
|
||||||
0314E39C1B661A460092D183 /* CameraFocusSquare.m */,
|
0314E39C1B661A460092D183 /* CameraFocusSquare.m */,
|
||||||
0314E39B1B661A0C0092D183 /* CameraFocusSquare.h */,
|
0314E39B1B661A0C0092D183 /* CameraFocusSquare.h */,
|
||||||
454EBCF31B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m */,
|
454EBCF31B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m */,
|
||||||
|
@ -128,6 +133,7 @@
|
||||||
454EBCF41B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m in Sources */,
|
454EBCF41B5082DC00AD0F86 /* NSMutableDictionary+ImageMetadata.m in Sources */,
|
||||||
4107014E1ACB732B00C6AA39 /* RCTCameraManager.m in Sources */,
|
4107014E1ACB732B00C6AA39 /* RCTCameraManager.m in Sources */,
|
||||||
4107014D1ACB732B00C6AA39 /* RCTCamera.m in Sources */,
|
4107014D1ACB732B00C6AA39 /* RCTCamera.m in Sources */,
|
||||||
|
9FE592B31CA3CBF500788287 /* RCTSensorOrientationChecker.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
#import <AssetsLibrary/ALAssetsLibrary.h>
|
#import <AssetsLibrary/ALAssetsLibrary.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
#import <ImageIO/ImageIO.h>
|
#import <ImageIO/ImageIO.h>
|
||||||
#import <CoreMotion/CoreMotion.h>
|
#import "RCTSensorOrientationChecker.h"
|
||||||
|
|
||||||
@interface RCTCameraManager ()
|
@interface RCTCameraManager ()
|
||||||
|
|
||||||
@property (strong, nonatomic) CMMotionManager * motionManager;
|
@property (strong, nonatomic) RCTSensorOrientationChecker * sensorOrientationChecker;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -465,8 +465,8 @@ RCT_EXPORT_METHOD(hasFlash:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRej
|
||||||
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
|
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
|
||||||
[self saveImage:imageData target:target metadata:nil resolve:resolve reject:reject];
|
[self saveImage:imageData target:target metadata:nil resolve:resolve reject:reject];
|
||||||
#else
|
#else
|
||||||
[self getDeviceOrientation:^(UIInterfaceOrientation orientation) {
|
[self.sensorOrientationChecker getDeviceOrientation:^(UIInterfaceOrientation orientation) {
|
||||||
[[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:[self convertToAVCaptureVideoOrientation: orientation]];
|
[[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:[self.sensorOrientationChecker convertToAVCaptureVideoOrientation: orientation]];
|
||||||
|
|
||||||
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
|
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
|
||||||
|
|
||||||
|
@ -872,63 +872,4 @@ didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)getDeviceOrientation:(void(^)(UIInterfaceOrientation orientation))callback
|
|
||||||
{
|
|
||||||
self.motionManager = [[CMMotionManager alloc] init];
|
|
||||||
self.motionManager.accelerometerUpdateInterval = DBL_MAX; // infinite delay, never update
|
|
||||||
self.motionManager.gyroUpdateInterval = DBL_MAX;
|
|
||||||
|
|
||||||
__weak CMMotionManager * weakMotionManager = self.motionManager;
|
|
||||||
__weak __typeof(self) weakSelf = self;
|
|
||||||
|
|
||||||
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue new]
|
|
||||||
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
|
|
||||||
// stop after the first sample
|
|
||||||
[weakMotionManager stopAccelerometerUpdates];
|
|
||||||
|
|
||||||
UIInterfaceOrientation deviceOrientation = UIInterfaceOrientationUnknown;
|
|
||||||
if (!error) {
|
|
||||||
deviceOrientation = [weakSelf getOrientationBy:accelerometerData.acceleration];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callback) {
|
|
||||||
callback(deviceOrientation);
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
- (UIInterfaceOrientation)getOrientationBy:(CMAcceleration)acceleration
|
|
||||||
{
|
|
||||||
if(acceleration.x >= 0.75) {
|
|
||||||
return UIInterfaceOrientationLandscapeLeft;
|
|
||||||
}
|
|
||||||
if(acceleration.x <= -0.75) {
|
|
||||||
return UIInterfaceOrientationLandscapeRight;
|
|
||||||
}
|
|
||||||
if(acceleration.y >= -0.75) {
|
|
||||||
return UIInterfaceOrientationPortrait;
|
|
||||||
}
|
|
||||||
if(acceleration.y >= 0.75) {
|
|
||||||
return UIInterfaceOrientationPortraitUpsideDown;
|
|
||||||
}
|
|
||||||
return [[UIApplication sharedApplication] statusBarOrientation];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (AVCaptureVideoOrientation)convertToAVCaptureVideoOrientation:(UIInterfaceOrientation)orientation
|
|
||||||
{
|
|
||||||
switch (orientation) {
|
|
||||||
case UIInterfaceOrientationPortrait:
|
|
||||||
return AVCaptureVideoOrientationPortrait;
|
|
||||||
case UIInterfaceOrientationPortraitUpsideDown:
|
|
||||||
return AVCaptureVideoOrientationPortraitUpsideDown;
|
|
||||||
case UIInterfaceOrientationLandscapeLeft:
|
|
||||||
return AVCaptureVideoOrientationLandscapeLeft;
|
|
||||||
case UIInterfaceOrientationLandscapeRight:
|
|
||||||
return AVCaptureVideoOrientationLandscapeRight;
|
|
||||||
default:
|
|
||||||
return 0; // unknown
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
//
|
||||||
|
// RCTSensorOrientationChecker.h
|
||||||
|
// RCTCamera
|
||||||
|
//
|
||||||
|
// Created by Radu Popovici on 24/03/16.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
|
||||||
|
@interface RCTSensorOrientationChecker : NSObject
|
||||||
|
|
||||||
|
- (void)getDeviceOrientation:(void(^)(UIInterfaceOrientation orientation))callback;
|
||||||
|
- (AVCaptureVideoOrientation)convertToAVCaptureVideoOrientation:(UIInterfaceOrientation)orientation;
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,79 @@
|
||||||
|
//
|
||||||
|
// RCTSensorOrientationChecker.m
|
||||||
|
// RCTCamera
|
||||||
|
//
|
||||||
|
// Created by Radu Popovici on 24/03/16.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "RCTSensorOrientationChecker.h"
|
||||||
|
#import <CoreMotion/CoreMotion.h>
|
||||||
|
|
||||||
|
@interface RCTSensorOrientationChecker ()
|
||||||
|
|
||||||
|
@property (strong, nonatomic) CMMotionManager * motionManager;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation RCTSensorOrientationChecker
|
||||||
|
|
||||||
|
- (void)getDeviceOrientation:(void(^)(UIInterfaceOrientation orientation))callback
|
||||||
|
{
|
||||||
|
self.motionManager = [[CMMotionManager alloc] init];
|
||||||
|
self.motionManager.accelerometerUpdateInterval = DBL_MAX; // infinite delay, never update
|
||||||
|
self.motionManager.gyroUpdateInterval = DBL_MAX;
|
||||||
|
|
||||||
|
__weak CMMotionManager * weakMotionManager = self.motionManager;
|
||||||
|
__weak __typeof(self) weakSelf = self;
|
||||||
|
|
||||||
|
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue new]
|
||||||
|
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
|
||||||
|
// stop after the first sample
|
||||||
|
[weakMotionManager stopAccelerometerUpdates];
|
||||||
|
|
||||||
|
UIInterfaceOrientation deviceOrientation = UIInterfaceOrientationUnknown;
|
||||||
|
if (!error) {
|
||||||
|
deviceOrientation = [weakSelf getOrientationBy:accelerometerData.acceleration];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callback) {
|
||||||
|
callback(deviceOrientation);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIInterfaceOrientation)getOrientationBy:(CMAcceleration)acceleration
|
||||||
|
{
|
||||||
|
if(acceleration.x >= 0.75) {
|
||||||
|
return UIInterfaceOrientationLandscapeLeft;
|
||||||
|
}
|
||||||
|
if(acceleration.x <= -0.75) {
|
||||||
|
return UIInterfaceOrientationLandscapeRight;
|
||||||
|
}
|
||||||
|
if(acceleration.y >= -0.75) {
|
||||||
|
return UIInterfaceOrientationPortrait;
|
||||||
|
}
|
||||||
|
if(acceleration.y >= 0.75) {
|
||||||
|
return UIInterfaceOrientationPortraitUpsideDown;
|
||||||
|
}
|
||||||
|
return [[UIApplication sharedApplication] statusBarOrientation];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (AVCaptureVideoOrientation)convertToAVCaptureVideoOrientation:(UIInterfaceOrientation)orientation
|
||||||
|
{
|
||||||
|
switch (orientation) {
|
||||||
|
case UIInterfaceOrientationPortrait:
|
||||||
|
return AVCaptureVideoOrientationPortrait;
|
||||||
|
case UIInterfaceOrientationPortraitUpsideDown:
|
||||||
|
return AVCaptureVideoOrientationPortraitUpsideDown;
|
||||||
|
case UIInterfaceOrientationLandscapeLeft:
|
||||||
|
return AVCaptureVideoOrientationLandscapeLeft;
|
||||||
|
case UIInterfaceOrientationLandscapeRight:
|
||||||
|
return AVCaptureVideoOrientationLandscapeRight;
|
||||||
|
default:
|
||||||
|
return 0; // unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Loading…
Reference in New Issue