admin管理员组文章数量:1122832
I am developing an app using Ionic Angular, and I am using a camera preview plugin to display the camera feed. I made modifications in the native code (Objective-C) to use the AVCaptureDeviceTypeBuiltInTripleCamera
for newer iPhones. The camera works as expected, but the preview is always rotated like landscape mode.
I want to ensure the camera always displays in portrait orientation, regardless of the device's physical orientation.
Here’s what I’ve done so far:
- (void)startCamera:(CDVInvokedUrlCommand*)command {
CDVPluginResult *pluginResult;
if (self.sessionManager != nil) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Camera already started!"];
[selfmandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
return;
}
if (command.arguments.count > 3) {
CGFloat x = (CGFloat)[command.arguments[0] floatValue] + self.webView.frame.origin.x;
CGFloat y = (CGFloat)[command.arguments[1] floatValue] + self.webView.frame.origin.y;
CGFloat width = (CGFloat)[command.arguments[2] floatValue];
CGFloat height = (CGFloat)[command.arguments[3] floatValue];
NSString *defaultCamera = command.arguments[4];
BOOL tapToTakePicture = (BOOL)[command.arguments[5] boolValue];
BOOL dragEnabled = (BOOL)[command.arguments[6] boolValue];
BOOL toBack = (BOOL)[command.arguments[7] boolValue];
CGFloat alpha = (CGFloat)[command.arguments[8] floatValue];
BOOL tapToFocus = (BOOL) [command.arguments[9] boolValue];
BOOL disableExifHeaderStripping = (BOOL) [command.arguments[10] boolValue]; // ignore Android only
self.storeToFile = (BOOL) [command.arguments[11] boolValue];
// Create the session manager
self.sessionManager = [[CameraSessionManager alloc] init];
// render controller setup
self.cameraRenderController = [[CameraRenderController alloc] init];
self.cameraRenderController.dragEnabled = dragEnabled;
self.cameraRenderController.tapToTakePicture = tapToTakePicture;
self.cameraRenderController.tapToFocus = tapToFocus;
self.cameraRenderController.sessionManager = self.sessionManager;
self.cameraRenderController.view.frame = CGRectMake(x, y, width, height);
self.cameraRenderController.delegate = self;
[self.viewController addChildViewController:self.cameraRenderController];
if (toBack) {
// Display the camera below the webview
// Make transparent
self.webView.opaque = NO;
self.webView.backgroundColor = [UIColor clearColor];
[self.webView.superview addSubview:self.cameraRenderController.view];
[self.webView.superview bringSubviewToFront:self.webView];
} else {
self.cameraRenderController.view.alpha = alpha;
[self.webView.superview insertSubview:self.cameraRenderController.view aboveSubview:self.webView];
}
// Setup session with ultra-wide or default camera
self.sessionManager.delegate = self.cameraRenderController;
[self.sessionManager setupSession:defaultCamera completion:^(BOOL started) {
if (started) {
// Configure ultra-wide camera if session started successfully
[self.sessionManager configureUltraWideCamera];
[selfmandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK] callbackId:command.callbackId];
} else {
[selfmandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Failed to start camera"] callbackId:command.callbackId];
}
}];
} else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Invalid number of parameters"];
[selfmandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
}
its rotating only when i call [self.sessionManager configureUltraWideCamera];
- (void)configureUltraWideCamera {
NSError *error = nil;
// Find an AVCaptureDevice of type ultra-wide camera
AVCaptureDevice *ultraWideCamera = [AVCaptureDevice defaultDeviceWithDeviceType:AVCaptureDeviceTypeBuiltInTripleCamera
mediaType:AVMediaTypeVideo
position:AVCaptureDevicePositionBack];
if (ultraWideCamera) {
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:ultraWideCamera error:&error];
if (!error && input) {
[self.session beginConfiguration]; // Begin session reconfiguration
[self.session removeInput:self.videoDeviceInput]; // Remove current input
if ([self.session canAddInput:input]) {
[self.session addInput:input]; // Add ultra-wide input
self.videoDeviceInput = input; // Update the input property
// Commit the session configuration
[self.session commitConfiguration];
[self.session startRunning];
NSLog(@"Switched to Ultra-Wide Camera and locked orientation to portrait");
} else {
[self.session commitConfiguration];
NSLog(@"Cannot add ultra-wide camera input to the session");
}
} else {
NSLog(@"Error creating input for ultra-wide camera: %@", error.localizedDescription);
}
} else {
NSLog(@"Ultra-Wide Camera is not supported on this device");
}
}
Modified the plugin's Objective-C code to use AVCaptureDeviceTypeBuiltInTripleCamera
to enable the ultra-wide camera for newer iPhones.
本文标签:
版权声明:本文标题:swift - Ionic Angular Camera Preview Plugin: How to Keep AVCaptureDeviceTypeBuiltInTripleCamera in Portrait Orientation? - Stack 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736283862a1927108.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论