Subview en el locking de Vista principal al asignar Imagen desde AVFoundation a UIImageView

He creado una camera AVFoundation personalizada y la cargué en otra vista como subvista con @IBDesignable , una vez que se toma la image me gustaría asignarlo a UIImageView , pero cuando se presiona el button, la vista personalizada de la camera ( UIView ) se UIView y se mueve en la pantalla, en lugar de asignarlo a UIImageView , Esto sucede cuando la vista de la camera personalizada se carga al principio, luego, cuando carga de nuevo la vista personalizada de la camera, asignará la image a UIImageView .

Método de captura de image:

 @IBAction func captureImage(sender: AnyObject) { if let stillOutput = self.captureImageOutput { // we do this on another thread so that we don't hang the UI dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { //find the video connection var videoConnection : AVCaptureConnection? for connecton in stillOutput.connections { //find a matching input port for port in connecton.inputPorts!{ if port.mediaType == AVMediaTypeVideo { videoConnection = connecton as? AVCaptureConnection break //for port } } if videoConnection != nil { break// for connections } } if videoConnection != nil { stillOutput.captureStillImageAsynchronouslyFromConnection(videoConnection){ (imageSampleBuffer : CMSampleBuffer!, _) in let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageSampleBuffer) let pickedImage: UIImage = UIImage(data: imageData, scale: 1.0)! dispatch_async(dispatch_get_main_queue(), { self.capturePhoto.image = pickedImage }) } } } } } 

También probé el command dispatch_sync y nada carga en el UIImageView , pero la pantalla no falla.

 dispatch_sync(dispatch_get_main_queue(), { self.capturePhoto.image = pickedImage }) 

Acabo de probarlo y esto funcionó para mí (Swift 2.0)

 override func viewDidLoad() { super.viewDidLoad() imageView = UIImageView(frame: self.view.frame) self.view.addSubview(imageView) } func takeImage() { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { guard let videoConnection = self.stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) else { return } guard videoConnection.enabled else { return } self.stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) { (buffer: CMSampleBuffer!, error: NSError!) -> Void in let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer) let image: UIImage = UIImage(data: imageData, scale: 1.0)! dispatch_async(dispatch_get_main_queue(), { self.imageView.image = image print("picture taken") }) } } } 

La image se toma con éxito y se agrega al ViewController. Si esto no funciona para ti, tal vez puedas explicar más sobre tu configuration para que pueda probar y reproducir el error / crash.