Kamera z niestandardowym widokiem

Moja aplikacja używa kamery, chciałbym dodać nakładkę na podgląd kamery. Na przykład Chcę użyć ramki na zdjęcia, gdy używam aparatu, a także chciałbym dodać niestandardowy pasek do operacji z aparatem. Pomóż mi zrobić to samo.

Author: HarshIT, 2011-10-03

4 answers

Możesz próbować użyć UIImagePickerController. Ale znam jedno rozwiązanie twojego problemu. Możesz to zrobić łatwo za pomocą klas AVCamCaptureManager i AVCamRecorder. Apple ma program demonstracyjny zbudowany na stronie dewelopera tutaj . Nazywa się AVCam. W prostych słowach to, co robi, gdy klikniesz, aby otworzyć aparat, wywołuje klasy i metody, które są odpowiedzialne za otwarcie aparatu iPhone ' a i nagrywanie wideo lub przechwytywanie dźwięku. Wywołuje te same klasy, które są nazywane przez UIImagePickerController. Więc aparat otworzy się i zacznie pobierać dane wejściowe.

Teraz, jeśli otworzysz plik xib tego projektu AVCam, znajdziesz mały obiekt UIView. Ten widok jest odpowiedzialny za wyświetlanie obrazu z kamery. Możesz zmienić rozmiar tego widoku zgodnie z żądanym rozmiarem, a wejście kamery będzie wyświetlane w tym dużym obszarze. Możesz również umieścić obraz ramki wokół niego zgodnie z wyborem.

To działało dla mnie, gdy chciałem zmienić rozmiar obrazu wejściowego kamery i uchwycić zdjęcia. Mam nadzieję, że tobie też się uda.

 55
Author: Dip Dhingani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-03 18:46:11

Utwórz interfejs interfejsu użytkownika z kodu, dostosuj jego właściwości, Dodaj do niego nakładkę, a za pomocą kontrolera steruj, co chcesz na tej nakładce : niestandardowe kontrolki, nakładanie obrazów itp...

To daje coś takiego:

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 jest kontrolerem, który musisz zapisać, aby kontrolować wszystko, co dodajesz do nakładki.

pickerReference jest własnością, którą możesz zachować, aby wysyłać zamówienia do kamery. Na przykład, można wywołać następujące z IBAction pochodzi z UIButton umieszczonego na nakładce:

[self.pickerReference takePicture];
 41
Author: Oliver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-12 00:48:38

Przeczytaj odniesienie do klasy UIImagePickerController , dokładnie w dokumentacji ...

Istnieją dla tego właściwości, szczególnie właściwości cameraOverlayView i showsCameraControls.

Możesz więc ukryć elementy sterujące, udostępnić niestandardowy widok Nakładki i dodać podglądy do tego niestandardowego widoku, aby dodać niestandardowe przyciski, ramki itp.

 4
Author: AliSoftware,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-03 18:45:39

Wersja Swift 3 dla odpowiedzi od Olivera:

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 protocols:

class OverlayViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate 
 0
Author: NikeAlive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 08:08:44