2015-09-14 21 views
8

ho creato una consuetudine AVFoundation fotocamera e caricato in un'altra vista come visualizzazione secondaria con @IBDesignable, dopo che l'immagine è presa vorrei assegnarlo a UIImageView , Ma quando si preme il pulsante, la vista personalizzata della telecamera (UIView) si arresta e si sposta in alto sullo schermo, invece di assegnarlo allo UIImageView, Ciò accade quando la vista personalizzata della telecamera viene caricata all'inizio, quindi quando carico la telecamera personalizzata di nuovo, assegnerà l'immagine allo UIImageView.visualizzazione secondaria in Vista principale incidente Quando si assegna un'immagine dal AVFoundation a UIImageView

Capture metodo 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 
         }) 
        } 
       } 
      } 
     } 

    } 

Ho anche provato il carico dispatch_sync e nulla nel UIImageView, ma lo schermo non crash.

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

che tipo di incidente stai ottenendo? c'è un backtrace che mostra quale linea del tuo codice sorgente sta causando l'arresto anomalo? –

+0

Non ho alcun errore. @MichaelDautermann – Xrait

+0

L'interfaccia utente si blocca semplicemente – Xrait

risposta

-1

ho appena provato e questo ha funzionato per me (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") 
      }) 
     } 
    } 

} 

L'immagine è presa con successo e ha aggiunto al ViewController. Se questo non funziona per te, forse puoi spiegare di più sul tuo setup in modo da poter provare e riprodurre l'errore/crash.