在iOS Swift中,我很难将动画GIF从设备图片库加载到UIImageView或从中创建.gif文件。如果它是服务器上的文件或正确在应用程序中,则显示动画GIF没问题。但是,当我从照片库中加载它时,会丢失动画。我找到了一些Objective- C解决方案,并试图将它们转换为Swift,但是没有任何运气。
这是我到目前为止的内容:
@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之类的东西?
谢谢。
是的,使用ALAssetsLibrary→现在称为PHAsset。
您应该获取gif的NSData,而不是UIImage(因为UIImage仅获取第一帧。)
因此,基本上,您将执行以下操作:
一个你得到的资产
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 } })
资源:PHAsset