2015-09-14 10 views
8
UIImageView

Ich habe eine benutzerdefinierte AVFoundation Kamera erstellt und in einer anderen Ansicht als Subview beladen mit @IBDesignable, nachdem das Bild aufgenommen wird ich es UIImageView zuweisen möchte , Aber wenn die Taste gedrückt wird, stürzt die benutzerdefinierte Kameraansicht (UIView) ab und bewegt sich auf dem Bildschirm nach oben, anstatt sie dem UIImageView zuzuweisen. Dies passiert, wenn die benutzerdefinierte Kameraansicht zu Beginn geladen wird, wenn ich die benutzerdefinierte Kamera lade Blick wieder, es wird das Bild der UIImageView zuweisen.Subview in Hauptansicht Absturz Wenn Bild von AVFoundation Zuordnung

Bildaufnahme-Methode:

@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 
         }) 
        } 
       } 
      } 
     } 

    } 

Ich habe auch versucht, die dispatch_sync und nichts Last in der UIImageView, aber der Bildschirm nicht abstürzen.

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

Welche Art von Crash bekommen Sie? Gibt es ein Backtrace, das anzeigt, welche Zeile des Quellcodes den Absturz verursacht? –

+0

Ich bekomme keinen Fehler. @MichaelDautermann – Xrait

+0

Die UI hängt einfach – Xrait

Antwort

-1

ich es getestet und das ist für mich (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") 
      }) 
     } 
    } 

} 

Das Bild erfolgreich genommen und auf den Viewcontroller hinzugefügt. Wenn dies für Sie nicht funktioniert, können Sie vielleicht mehr über Ihr Setup erklären, damit ich versuchen kann, den Fehler/Absturz zu reproduzieren.