web-dev-qa-db-de.com

Kamera mit benutzerdefinierter Ansicht

Meine Anwendung verwendet eine Kamera, ich möchte Overlay über der Kameravorschau hinzufügen. Ich möchte zum Beispiel einen Bilderrahmen verwenden, wenn ich die Kamera verwende. Außerdem möchte ich eine benutzerdefinierte Leiste für die Kamerafunktionen hinzufügen. Helfen Sie mir bitte, das Gleiche zu tun.

40
CrazyDev

Möglicherweise versuchen Sie, UIImagePickerController zu verwenden. Aber ich kenne diese eine Lösung für Ihr Problem. Sie können dies problemlos mit den Klassen AVCamCaptureManager und AVCamRecorder tun. Apple hat auf seiner Entwicklerseite hier ein Demo-Programm aufgebaut. Es heißt AVCam. In einfachen Worten: Wenn Sie die Kamera öffnen, werden die Klassen und Methoden aufgerufen, die für das Öffnen der iPhone-Kamera und das Aufzeichnen von Video oder das Aufnehmen von Audio verantwortlich sind. Es ruft dieselben Klassen auf, die von UIImagePickerController aufgerufen werden. So öffnet sich Ihre Kamera und beginnt mit der Eingabe.

Wenn Sie nun die XIB-Datei dieses AVCam-Projekts öffnen, finden Sie ein kleines UIView-Objekt. In dieser Ansicht wird der Feed der Kamera angezeigt. Sie können die Größe der Ansicht entsprechend der gewünschten Größe ändern, und die Eingabe der Kamera wird in diesem Bereich angezeigt. Sie können das Rahmenbild auch nach Ihrer Wahl um das Bild legen. 

Es funktionierte für mich, als ich den Eingangsfeed der Kamera ändern und Fotos aufnehmen wollte. Ich hoffe es funktioniert auch für dich.

56
Dip Dhingani

Erstellen Sie einen UIImagePickerController aus Code, passen Sie die Eigenschaften an, fügen Sie eine Überlagerung hinzu, und steuern Sie mit Ihrem Controller die gewünschten Elemente für diese Überlagerung: benutzerdefinierte Steuerelemente, Überlagerungen von Bildern usw.

Das gibt so etwas wie:

self.picker = [[UIImagePickerController alloc] init];
self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
self.picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
self.picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
self.picker.showsCameraControls = NO;
self.picker.navigationBarHidden = YES;
self.picker.toolbarHidden = YES;
self.picker.wantsFullScreenLayout = YES;

// Insert the overlay
self.overlay = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
self.overlay.pickerReference = self.picker;
self.picker.cameraOverlayView = self.overlay.view;
self.picker.delegate = self.overlay;

[self presentModalViewController:self.picker animated:NO];

OverlayViewController ist der Controller, den Sie schreiben müssen, um alles zu steuern, das Sie der Überlagerung hinzufügen.

pickerReference ist eine Eigenschaft, die Sie behalten können, um Bestellungen an die Kamera zu senden. Sie können beispielsweise Folgendes von einer IBAction aus einem UIButton aufrufen, der auf dem Overlay platziert ist:

[self.pickerReference takePicture];
41
Oliver

Lesen Sie die UIImagePickerController-Klassenreferenz , das stimmt in der Dokumentation…

Hierfür gibt es Eigenschaften, insbesondere die Eigenschaften cameraOverlayView und showsCameraControls.

Sie können die Steuerelemente ausblenden, eine benutzerdefinierte Überlagerungsansicht bereitstellen und dieser benutzerdefinierten Ansicht Unteransichten hinzufügen, um benutzerdefinierte Schaltflächen, Rahmen usw. hinzuzufügen.

4
AliSoftware

Swift 3 Version für die Antwort von Oliver:

self.picker = UIImagePickerController()
self.picker.sourceType = .camera
self.picker.cameraCaptureMode = .photo
self.picker.cameraDevice = .rear
self.picker.showsCameraControls = false
self.picker.isNavigationBarHidden = true
self.picker.isToolbarHidden = true

// Insert the overlay
self.overlayViewController = self.storyboard?.instantiateViewController(withIdentifier: "Overlay") as! OverlayViewController

self.picker.cameraOverlayView = self.overlayViewController.view
self.picker.delegate = self.overlayViewController
self.navigationController?.present(self.picker, animated: true, completion: nil)

OverlayViewController-Protokolle:

class OverlayViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate 
0
NikeAlive