2016-06-21 10 views
3

iOS Swiftでは、アニメーションGIFをデバイスのフォトライブラリからUIImageViewに読み込んだり、.gifファイルを作成したりしています。私はそれがサーバー上のファイルまたはそれがアプリ内であればアニメーションGIFを表示するのに問題はありません。しかし、写真ライブラリからロードするとアニメーションが失われます。私はいくつかのObjective-Cソリューションを見つけ、それらをSwiftに変換しようとしましたが、運が全くありませんでした。アニメーションGIFを写真ライブラリからロードする方法

@IBAction func buttonTapped(sender: UIButton) { 
    selectPhoto() 
} 

func selectPhoto() { 
    let photoLibraryController = UIImagePickerController() 
    photoLibraryController.delegate = self 
    photoLibraryController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 

    let mediaTypes:[String] = [kUTTypeImage as String] 
    photoLibraryController.mediaTypes = mediaTypes 
    photoLibraryController.allowsEditing = false 

    self.presentViewController(photoLibraryController, animated: true, completion: nil) 
} 

// UIImagePickerControllerDelegate 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    let origImage = info[UIImagePickerControllerOriginalImage] as! UIImage 

    self.imageView.image = origImage 

    picker.dismissViewControllerAnimated(true, completion: nil) 

} 

最適に、私は、サーバー上のGIFファイルへの写真のライブラリの画像を保存したいと思います:ここで

は、私がこれまで持っているものです。そこから私はそれを表示するのに問題はありません。しかし、アニメーションを失うことなく、フォトライブラリからのデータをある種のプロパティに変換する助けが必要です。これにはALAssetsLibraryのようなものを使用する必要がありますか?

ありがとうございました。

+0

ここでのアプローチです。最も簡単な方法は、CocoaPodをインストールすることです。 CocoaPods - > https://www.raywenderlich.com/97014/use-cocoapods-with-swiftを使用する方法は次のとおりです。ここにObjCの別の解決策があります - > http://stackoverflow.com/a/4386709/4475605 – Adrian

+0

ありがとう、@アドリアン。私は実際に岐阜をセットアップして試していました。それは、画像がアプリケーションにコンパイルされることを期待することを除いて、うまく動作します。それは、アプリケーションのどこか他の場所からイメージを取得するための方法を提供しません。したがって、私は写真ライブラリの画像で動作するようにはできませんでした。 – Lastmboy

+0

メモリの使用状況とディスクからのロードを処理するGIFローディングライブラリについて、私のブログ記事を読むことができます:http://www.modejong.com/blog/post6_new_animated_gif_decoder_for_avanimator – MoDJ

答えて

6

はい、ALAstetsLibrary→PHAssetを使用してください。

(UIImageは、最初のフレームのみを取得しますので。)あなたは、GIF、ないUIImageのNSDataのを取得する必要があります

だから、基本的にはこのようなものだろう:

一つを、あなたは、資産

を取得
let requestOptions = PHImageRequestOptions() 
requestOptions.isSynchronous = true // adjust the parameters as you wish  

PHImageManager.default().requestImageData(for: asset, options: requestOptions, resultHandler: { (imageData, UTI, _, _) in 
    if let uti = UTI,let data = imageData , 
     // you can also use UTI to make sure it's a gif 
     UTTypeConformsTo(uti as CFString, kUTTypeGIF) { 
     // save data here 
    } 
})  

資源: - > https://github.com/kaishin/Gifu PHAsset

関連する問題