2015-01-07 22 views
8

Sto provando a creare un'esperienza personalizzata per la fotocamera su iOS e il seguente frammento di codice è il massimo che ho ottenuto. Fondamentalmente voglio la solita vista della telecamera (cioè con i seguenti pulsanti: acquisizione, flash, griglia, fronte/retro, annulla). Ma l'unica differenza tra la normale fotocamera e la mia è che voglio un quadrato per la superficie di anteprima; non un rettangolo. E poi, quello che vedi è ciò che ottieni (WYSIWYG) in modo tale che non è necessario il ritaglio; in quanto l'utente avrebbe scattato una foto quadrata in primo luogo.creazione di una telecamera personalizzata con vista quadrata su iOS

Ho anche guardato la libreria https://github.com/danielebogo/DBCamera ma non vedo come personalizzarlo alla mia fine. Qualsiasi aiuto? Grazie.

MIO CODICE FINORA:

- (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]; 
} 

Questo è l'unico codice personalizzato in un unico progetto vista sul Xcode

+0

Sono un po 'confuso - vuoi creare la tua vista da fotocamera da zero, o vuoi usare il' UIImagePickerController 'incorporato e personalizzarlo un po'? – Aleksander

+0

O uno andrebbe bene finché avrò un buon controllo su ciò che sta accadendo. Ho anche osservato l'opzione Picker; ma sembra esserci consenso sul fatto che sia un approccio più scadente; ed è per questo che ho cercato l'approccio "da zero" negli ultimi giorni. –

+0

Sì, il 'UIImagePickerController' non è qualcosa che raccomanderò personalmente se si desidera il pieno controllo.Tuttavia, è molto veloce e facile da implementare. Fornisce una discreta quantità di opzioni di personalizzazione, dai uno sguardo a questo post: [collegamento] (http://stackoverflow.com/questions/7639188/ios-camera-with-custom-view) Se desideri più opzioni , vai a dare un'occhiata a questo programma dimostrativo di Apple sulle classi AV [link] (https://developer.apple.com/library/ios/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40010112) – Aleksander

risposta

10

Avete due opzioni per fare ciò che si vuole, o bastone con e personalizzare un UIImagePickerController , o crearne uno utilizzando lo AVFoundation.

Il UIImagePickerController fornisce un bel po 'di opzioni di personalizzazione, e questo thread simile ha alcune buone informazioni su questo: link.

Se vuoi ancora crearne uno, ti suggerisco di andare alla Documentazione di Apple e di dare un'occhiata a questo progetto demo chiamato AVCam: link. Tuttavia, è molto più approfondito di quanto probabilmente avrai bisogno quindi posso consigliare questo tutorial video: link.

Se andando per l'ultima opzione, vorrei ricordare che per fare la "camera reale" fit la struttura del vostro previewLayer, è possibile impostare il videoGravity sul AVCaptureVideoPreviewLayer-AVLayerVideoGravityResizeAspectFill.

+2

C'è un modo per rendere l'immagine risultante corrispondente a ciò che vedi nell'anteprima? Questo ha funzionato per darmi un'anteprima a livello di anteprima quadrata, ma l'immagine che ne ricavo è ancora il rapporto di aspetto della fotocamera originale. – sak

0

Lavorare con una fotocamera personalizzata può essere un po 'un problema, ma pagherà i dividendi dato che sarai davvero in grado di personalizzare la tua esperienza di app.

Il modo più semplice per farlo è utilizzare TGCameraViewController.

Utilizzando questo TGCameraViewController, è possibile modificare l'intera vista della telecamera. Inoltre, fornisce le seguenti funzionalità: -

  • modo semplice per accedere album (rullino fotografico)
  • Flash automatico, off e on
  • fuoco
  • fotocamera anteriore e posteriore

anche è possibile consultare il documento AVCamManual: Extending AVCam to Use Manual Capture per creare una telecamera personalizzata.