diff --git a/Camera.ios.js b/Camera.ios.js
index 5ab85fe..243f0bd 100644
--- a/Camera.ios.js
+++ b/Camera.ios.js
@@ -16,7 +16,8 @@ var constants = {
CaptureMode: NativeModules.CameraManager.CaptureMode,
CaptureTarget: NativeModules.CameraManager.CaptureTarget,
Orientation: NativeModules.CameraManager.Orientation,
- FlashMode: NativeModules.CameraManager.FlashMode
+ FlashMode: NativeModules.CameraManager.FlashMode,
+ TorchMode: NativeModules.CameraManager.TorchMode,
};
var Camera = React.createClass({
@@ -44,6 +45,10 @@ var Camera = React.createClass({
flashMode: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number
+ ]),
+ torchMode: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
])
},
@@ -62,6 +67,7 @@ var Camera = React.createClass({
captureMode: constants.CaptureMode.still,
captureTarget: constants.CaptureTarget.memory,
flashMode: constants.FlashMode.off,
+ torchMode: constants.TorchMode.off
};
},
@@ -89,7 +95,8 @@ var Camera = React.createClass({
var aspect = this.props.aspect,
type = this.props.type,
orientation = this.props.orientation,
- flashMode = this.props.flashMode;
+ flashMode = this.props.flashMode,
+ torchMode = this.props.torchMode;
var legacyProps = {
aspect: {
@@ -152,6 +159,7 @@ var Camera = React.createClass({
type: type,
orientation: orientation,
flashMode: flashMode,
+ torchMode: torchMode
});
return
@@ -192,6 +200,7 @@ var RCTCamera = createReactNativeComponentClass({
type: true,
orientation: true,
flashMode: true,
+ torchMode: true
}),
uiViewClassName: 'RCTCamera',
});
diff --git a/RCTCamera.m b/RCTCamera.m
index fb63b21..7be3c8b 100644
--- a/RCTCamera.m
+++ b/RCTCamera.m
@@ -53,6 +53,11 @@
[self.manager changeFlashMode:flashMode];
}
+- (void)setTorchMode:(NSInteger)torchMode
+{
+ [self.manager changeTorchMode:torchMode];
+}
+
- (id)initWithManager:(RCTCameraManager*)manager
{
diff --git a/RCTCameraManager.h b/RCTCameraManager.h
index a8e4d6f..8474edc 100644
--- a/RCTCameraManager.h
+++ b/RCTCameraManager.h
@@ -39,6 +39,12 @@ typedef NS_ENUM(NSInteger, RCTCameraFlashMode) {
RCTCameraFlashModeAuto = AVCaptureFlashModeAuto
};
+typedef NS_ENUM(NSInteger, RCTCameraTorchMode) {
+ RCTCameraTorchModeOff = AVCaptureTorchModeOff,
+ RCTCameraTorchModeOn = AVCaptureTorchModeOn,
+ RCTCameraTorchModeAuto = AVCaptureTorchModeAuto
+};
+
@interface RCTCameraManager : RCTViewManager
@property (nonatomic) dispatch_queue_t sessionQueue;
@@ -54,6 +60,7 @@ typedef NS_ENUM(NSInteger, RCTCameraFlashMode) {
- (void)changeCamera:(NSInteger)camera;
- (void)changeOrientation:(NSInteger)orientation;
- (void)changeFlashMode:(NSInteger)flashMode;
+- (void)changeTorchMode:(NSInteger)torchMode;
- (AVCaptureDevice *)deviceWithMediaType:(NSString *)mediaType preferringPosition:(AVCaptureDevicePosition)position;
- (void)capture:(NSDictionary*)options callback:(RCTResponseSenderBlock)callback;
diff --git a/RCTCameraManager.m b/RCTCameraManager.m
index 3a17940..b7d0c52 100644
--- a/RCTCameraManager.m
+++ b/RCTCameraManager.m
@@ -22,6 +22,7 @@ RCT_EXPORT_VIEW_PROPERTY(aspect, NSInteger);
RCT_EXPORT_VIEW_PROPERTY(type, NSInteger);
RCT_EXPORT_VIEW_PROPERTY(orientation, NSInteger);
RCT_EXPORT_VIEW_PROPERTY(flashMode, NSInteger);
+RCT_EXPORT_VIEW_PROPERTY(torchMode, NSInteger);
- (NSDictionary *)constantsToExport
{
@@ -55,6 +56,11 @@ RCT_EXPORT_VIEW_PROPERTY(flashMode, NSInteger);
@"off": @(RCTCameraFlashModeOff),
@"on": @(RCTCameraFlashModeOn),
@"auto": @(RCTCameraFlashModeAuto)
+ },
+ @"TorchMode": @{
+ @"off": @(RCTCameraTorchModeOff),
+ @"on": @(RCTCameraTorchModeOn),
+ @"auto": @(RCTCameraTorchModeAuto)
}
};
}
@@ -185,6 +191,23 @@ RCT_EXPORT_METHOD(changeOrientation:(NSInteger)orientation) {
self.previewLayer.connection.videoOrientation = orientation;
}
+RCT_EXPORT_METHOD(changeTorchMode:(NSInteger)torchMode) {
+ AVCaptureDevice *device = [self.captureDeviceInput device];
+ NSError *error = nil;
+
+ if ([device hasTorch]) {
+ if ([device lockForConfiguration:&error])
+ {
+ [device setTorchMode: torchMode];
+ [device unlockForConfiguration];
+ }
+ else
+ {
+ NSLog(@"%@", error);
+ }
+ }
+}
+
RCT_EXPORT_METHOD(capture:(NSDictionary *)options callback:(RCTResponseSenderBlock)callback) {
NSInteger captureMode = [[options valueForKey:@"mode"] intValue];
NSInteger captureTarget = [[options valueForKey:@"target"] intValue];
diff --git a/README.md b/README.md
index 837a34d..5b9c09e 100644
--- a/README.md
+++ b/README.md
@@ -158,6 +158,15 @@ Values:
Use the `flashMode` property to specify the camera flash mode.
+#### `torchMode`
+
+Values:
+`Camera.constants.TorchMode.on`,
+`Camera.constants.TorchMode.off`,
+`Camera.constants.TorchMode.auto`
+
+Use the `torchMode` property to specify the camera torch mode.
+
## Component methods
You can access component methods by adding a `ref` (ie. `ref="camera"`) prop to your `` element, then you can use `this.refs.camera.capture(cb)`, etc. inside your component.