2016-10-17 3 views
1

Я пытаюсь использовать это: https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.htmlAVCamera фото захвата компании Apple

Я пытаюсь получить доступ к photoData после того, как снимок был сделан таким образом, я могу загрузить его на сервер.

Когда кнопка захвата нажата, тонна кода установки получает запуск, а затем это называется в самом низу:

self.photoOutput.capturePhoto(with: photoSettings, delegate: photoCaptureDelegate) 

photoCaptureDelegate является другим файлом, который поставляется вместе с проектом, так и внутри что это:

func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) { 
     if let photoSampleBuffer = photoSampleBuffer { 
      photoData = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: photoSampleBuffer, previewPhotoSampleBuffer: previewPhotoSampleBuffer) 
      print("Got photo Data...this is where I want to capture/use the data") 

     } 
     else { 
      print("Error capturing photo: \(error)") 
      return 
     } 
    } 

Так что в этом photoCaptureDelegate «photoData» становится установлен в формате JPEG на то, что картина принимаются. Я хочу, чтобы затем использовать эти данные в контроллере представления, кнопка capturePhoto, чтобы я мог загрузить ее на сервер, используя функции, которые я определил в главном контроллере.

Как захватить данные фотографии и использовать их обратно в другом диспетчере представлений, который вызвал self.photoOutput.capturePhoto?

Альтернативно .. Было бы плохой практикой просто запустить отправку на серверный код непосредственно из файла didFinishProcessingPhoto? Я мог бы сделать так, чтобы у меня был доступ к переменным, которые мне нужны изнутри, но это кажется неправильным.

ответ

1

Это не нужно делать в делегате.

В вызове, в CameraViewController, при создании PhotoCaptureDelegate (строка 533) у него есть 3 обратных вызова, последний из которых завершен, в этом коде вы получаете photoCaptureDelegate, ответственный за фотографию, и в нем у вас есть код , поэтому вы можете делать то, что вы хотите там

completed: { [unowned self] photoCaptureDelegate in 
    //Save capture here. Image data is in here 
    //photoCaptureDelegate.photoData 
    self.sessionQueue.async { [unowned self] in     
     self.inProgressPhotoCaptureDelegates[photoCaptureDelegate.requestedPhotoSettings.uniqueID] = nil 
    } 
} 
+0

Спасибо, что нашли время, чтобы скачать проект и помочь мне здесь. Ценить это :) – user6820041

Смежные вопросы