2015-01-07 4 views
8

Ich versuche, eine benutzerdefinierte Kamera Erfahrung auf iOS zu erstellen und das folgende Code-Snippet ist so weit wie ich habe. Grundsätzlich möchte ich die übliche Kameraansicht (d. H. Mit den folgenden Tasten: capture, flash, grid, front/back, cancel). Aber der einzige Unterschied zwischen der normalen Kamera und meiner ist, dass ich ein Quadrat für die Vorschau-Oberfläche möchte; kein Rechteck. Und dann, was du siehst, ist, was du bekommst (WYSIWYG), so dass kein Beschneiden notwendig ist; als hätte der Benutzer zuerst ein quadratisches Bild gemacht.erstellen benutzerdefinierte Kamera mit quadratischen Blick auf iOS

Ich habe auch die Bibliothek https://github.com/danielebogo/DBCamera betrachtet, aber ich sehe nicht, wie man es an mein Ende anpassen kann. Irgendeine Hilfe? Vielen Dank.

MEIN CODE SO FAR:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    //Capture Session 
    AVCaptureSession *session = [[AVCaptureSession alloc]init]; 
    session.sessionPreset = AVCaptureSessionPresetPhoto; 

    //Add device 
    AVCaptureDevice *device = 
    [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

    //Input 
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; 

    if (!input) 
    { 
     NSLog(@"No Input"); 
    } 

    [session addInput:input]; 

    //Output 
    AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; 
    [session addOutput:output]; 
    output.videoSettings = 
    @{ (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA) }; 

    //Preview Layer 
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
    UIView *myView = self.view; 
    previewLayer.frame = myView.bounds; 
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
    [self.view.layer addSublayer:previewLayer]; 

    //Start capture session 
    [session startRunning]; 
} 

Dies ist der einzige Code benutzerdefinierte in einer einzigen Ansicht Projekt auf Xcode

+0

Ich bin ein wenig verwirrt - möchten Sie Ihre eigene Kamera-Ansicht von Grund auf neu erstellen, oder möchten Sie den eingebauten 'UIImagePickerController' verwenden und einfach ein wenig anpassen? – Aleksander

+0

Entweder wäre es okay, solange ich die Kontrolle darüber habe, was passiert. Ich habe auch die Picker-Option angeschaut. aber es scheint Konsens zu geben, dass es ein schlechterer Ansatz ist; Aus diesem Grund habe ich in den letzten Tagen den "von Grund auf" -Ansatz erforscht. –

+0

Ja, der 'UIImagePickerController' ist nicht etwas, was ich persönlich empfehlen würde, wenn Sie die volle Kontrolle haben wollen.Es ist jedoch sehr schnell und einfach zu implementieren. Es bietet eine große Anzahl von Anpassungsoptionen, werfen Sie einen Blick auf diesen Artikel: [link] (http://stackoverflow.com/questions/7639188/ios-camera-with-custom-view) Wenn Sie weitere Optionen wünschen , schau dir dieses Demo-Programm von Apple auf den AV-Klassen an [link] (https://developer.apple.com/library/ios/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40010112) – Aleksander

Antwort

10

Sie haben zwei Möglichkeiten für das, was Sie wollen, entweder Stick mit und fertigen Sie einen UIImagePickerController oder erstellen Sie Ihre eigenen mit der AVFoundation.

Die UIImagePickerController bietet eine Reihe von Anpassungsoptionen, und dieser ähnliche Thread hat einige gute Informationen dazu: link.

Wenn Sie noch Ihre eigenen erstellen möchten, empfehle ich, zur Apple-Dokumentation zu gehen und dieses Demo-Projekt namens AVCam: link zu testen. Es ist jedoch viel detaillierter, als Sie wahrscheinlich benötigen, so dass ich dieses Video-Tutorial auch empfehlen kann: link.

Wenn für die letzte Option, würde ich das machen die „eigentliche Kamera“ passen den Rahmen Ihres previewLayer, können Sie die videoGravity auf der AVCaptureVideoPreviewLayer-AVLayerVideoGravityResizeAspectFill gesetzt zu erwähnen.

+2

Gibt es eine Möglichkeit, das resultierende Bild mit dem zu vergleichen, was Sie in der Vorschau sehen? Dies hat mir geholfen, eine quadratische Vorschau-Layer-Ausgabe zu erhalten, aber das Bild, das ich daraus erhalte, ist immer noch das ursprüngliche Kamera-Seitenverhältnis. – sak

0

Die Arbeit mit einer benutzerdefinierten Kamera kann ein wenig schmerzhaft sein, aber es zahlt sich aus, da Sie Ihre App-Erfahrung wirklich anpassen können.

Der einfachste Weg ist die Verwendung von TGCameraViewController.

Mit dieser TGCameraViewController können Sie die gesamte Kameraansicht bearbeiten. Auch Sie bietet folgende Funktionalitäten: -

  • einfache Weise Album (Camera Roll)
  • Flash-Auto für den Zugriff aus und
  • Fokus
  • Vorder- und Rückseite Kamera

auch Sie können auf das Dokument AVCamManual: Extending AVCam to Use Manual Capture verweisen, um eine eigene benutzerdefinierte Kamera zu erstellen.

Verwandte Themen