From 9a642201ecc066a54242e11d65b32874435cc692 Mon Sep 17 00:00:00 2001 From: Alexander Kuznetsov Date: Tue, 22 Sep 2020 14:45:45 +0700 Subject: [PATCH 1/2] Implement setPointOfInterest method for iOS --- ios/Classes/CameraPlugin.m | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ios/Classes/CameraPlugin.m b/ios/Classes/CameraPlugin.m index abccf89..8e26ac1 100644 --- a/ios/Classes/CameraPlugin.m +++ b/ios/Classes/CameraPlugin.m @@ -746,6 +746,20 @@ - (void)setAutoFocus:(BOOL)enable [_captureDevice unlockForConfiguration]; } +-(void) setPointOfInterest:(CGPoint)point { + if ([_captureDevice isFocusPointOfInterestSupported]) { + + NSError *error; + + if ([_captureDevice lockForConfiguration:&error]) { + [_captureDevice setFocusPointOfInterest:point]; + [_captureDevice setFocusMode:AVCaptureFocusModeAutoFocus]; + [_captureDevice unlockForConfiguration]; + } else { + NSLog(@"Error in Focus Mode"); + } + } + - (void)zoom:(double)zoom { NSError *error = nil; @@ -997,6 +1011,11 @@ - (void)handleMethodCallAsync:(FlutterMethodCall *)call result:(FlutterResult)re result(nil); } else if ([@"autoExposureOff" isEqualToString:call.method]) { [_camera setAutoExposureMode:false]; + } else if([@"setPointOfInterest" isEqualToString:call.method]) { + NSNumber *dx = call.arguments[@"offsetX"]; + NSNumber *dy = call.arguments[@"offsetY"]; + CGPoint point = CGPointMake(dx.floatValue, dy.floatValue); + [_camera setPointOfInterest:point]; } else if ([@"zoom" isEqualToString:call.method]){ NSNumber *step = call.arguments[@"step"]; [_camera zoom:[step doubleValue]]; From 05641544b9b9c205e579c9fe1eff5e3a23a10d5d Mon Sep 17 00:00:00 2001 From: Alexander Kuznetsov Date: Tue, 22 Sep 2020 14:46:17 +0700 Subject: [PATCH 2/2] Fix example --- example/lib/main.dart | 27 ++++++++++++++------------- example/pubspec.yaml | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 05209d1..6aac3c4 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -88,17 +88,19 @@ class _CameraExampleHomeState extends State child: Padding( padding: const EdgeInsets.all(1.0), child: Center( - child: ZoomableWidget( - child: _cameraPreviewWidget(), - onTapUp: (scaledPoint) { - //controller.setPointOfInterest(scaledPoint); - }, - onZoom: (zoom) { - print('zoom'); - if (zoom < 11) { - controller.zoom(zoom); - } - })), + child: ZoomableWidget( + child: _cameraPreviewWidget(), + onTapUp: (scaledPoint) { + controller.setPointOfInterest(scaledPoint); + }, + onZoom: (zoom) { + print('zoom'); + if (zoom < 11) { + controller.zoom(zoom); + } + }, + ), + ), ), decoration: BoxDecoration( color: Colors.black, @@ -623,8 +625,7 @@ class _ZoomableWidgetState extends State { final Offset localPoint = box.globalToLocal(det.globalPosition); final Offset scaledPoint = localPoint.scale(1 / box.size.width, 1 / box.size.height); - // TODO IMPLIMENT - // widget.onTapUp(scaledPoint); + widget.onTapUp(scaledPoint); }, child: Stack(children: [ Column( diff --git a/example/pubspec.yaml b/example/pubspec.yaml index e1de173..d0a88be 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_example description: Demonstrates how to use the camera plugin. dependencies: - camera: + flutter_better_camera: path: ../ path_provider: ^0.5.0 flutter: