Получить Gif в UIImageView из UIImagePickerController

#ios #swift #uiimageview #uiimage #uiimagepickercontroller

#iOS #swift #uiimageview #uiimage #uiimagepickercontroller

Вопрос:

Библиотека GIFU, используемая для отображения Gif-изображения в UIImageView выбранном из UIImagePickerController

   public func imagePickerController(_ picker: UIImagePickerController,
                                    didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
    
    
    let imageUrl          = info[.referenceURL] as! NSURL
    let imageName         = imageUrl.lastPathComponent
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
    let photoURL          = NSURL(fileURLWithPath: documentDirectory)
    let localPath         = photoURL.appendingPathComponent(imageName!)
    let image             = info[.originalImage]as! UIImage
    let data              = image.jpegData(compressionQuality: 0)
    
    do {
      try data?.write(to: localPath!, options: Data.WritingOptions.atomic)
    }
    catch
    {
      // Catch exception here and act accordingly
    }
    self.pickerController(picker, didSelect: data)
  }
  
  func didSelect(image: Data?) {
    
    tempImage.prepareForAnimation(withGIFData: image!, loopCount: 3) {
      DispatchQueue.main.asyncAfter(deadline: .now()   0.5, execute: {
        self.tempImage.startAnimating()
      })
    }
  }
  

Отображение изображения, но не анимация, выглядит так, что формат изображения меняется после выбора.

Ответ №1:

Вы конвертируете данные GIF в jpeg, используя следующую строку кода.

  let data  = image.jpegData(compressionQuality: 0)
  

Избегайте преобразования данных в JPEG, теперь (я думаю, начиная с iOS 13) собственный контроллер поддерживает предварительный просмотр gif-файла при выборе, попробуйте это.