2016-05-17 22 views
0

キャプチャしたビデオを変換してGIFに変換しようとしていますが、変換したGifを保存してUIImageオブジェクトに保存することに問題があります。 Ultimatley、私はこのオブジェクトを使ってUIImageViewのgifを表示しようとしています。また、私はNSGIFを使って私のビデオiinto Gifを変換しています。私のコードは次のとおりです:gifをUIImageに保存する

@IBOutlet weak var tempImageView3: UIImageView! 

@IBAction func capture(sender: AnyObject) { 
    if !isRecording { 
     isRecording = true 

     UIView.animateWithDuration(0.5, delay: 0.0, options: [.Repeat, .Autoreverse, .AllowUserInteraction], animations: {() ->() in 
      self.cameraButton.transform = CGAffineTransformMakeScale(0.5, 0.5) 
      }, completion: nil) 

     let outputPath = NSTemporaryDirectory() + "output.mov" 
     let outputFileURL = NSURL(fileURLWithPath: outputPath) 
     let gifURL: NSURL 

     NSGIF.createGIFfromURL(outputFileURL, withFrameCount: 16, delayTime: Float(0.2), loopCount: 0, completion: { (gifURL) -> Void in 
      print("output saved \(gifURL)") 
     }) 

     videoFileOutput?.startRecordingToOutputFileURL(outputFileURL, recordingDelegate: self) 
    } else { 
     isRecording = false 
     UIView.animateWithDuration(0.5, delay: 1.0, options: [], animations: {() ->() in 
      self.cameraButton.transform = CGAffineTransformMakeScale(1.0, 1.0) 
      }, completion: nil) 
     cameraButton.layer.removeAllAnimations() 
     videoFileOutput?.stopRecording() 

    } 
} 

答えて

0

まず、不必要な定数let gifURL: NSURLを宣言しています。それは定数であり、変数ではないという事実に加えて、とにかく値を設定することはできません。クロージャー内にあるのは同じgifURLではありません。それは、とにかく最初を上書きする2番目の定義です。 let行を削除します。

第2に、私はNSGIFライブラリを知らないが、あなたのロジックは後方に現れる。 videoFileOutput?.startRecordingToOutputFileURLを呼び出してファイルを作成する前に、変換するファイルを示すoutputFileURLパラメータを持つNSGIF.createGIFfromURLを呼び出しています。

私はまずレコーディングをしたいと思います。レコーディングをやめると、ファイルを変換します。

createGIFfromURLコールをelseブロックの後ろのvideoFileOutput?.stopRecording()ブロックに移動してみてください。

私はメインスレッドで起こっていることに心配しています。 videoFileOutputオブジェクトにはdelegateが表示されます。録音が終わったら、それはイベントを受け取りますか?もしそうなら、それはファイルを変換するより良い場所になります。

関連する問題