Показывает много картинок в коллекцию

В моем приложении я хочу показать GIF-файлы из Giphy. Получение и прочее не проблема, но я не знаю, как лучше всего отобразить, например, все трендовые гифки. У меня есть коллекция, которая должна отображать все картинки с этим кодом:

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: GifChooserCell.cellIdentifier, for: indexPath) as! GifChooserCell

      let data = try! Data(contentsOf: gif.giphyURL)
      let image = FLAnimatedImage(animatedGIFData: data)
      cell.image.animatedImage = image


    return cell
  }

Проблема в том, что это загружает все в оперативную память, а приложение работает очень медленно. Какой лучший способ сделать это? Асинхронный? Ленивая загрузка?

1 ответ

Решение

Я столкнулся с той же проблемой с AImage, который также загружает файлы APNG. Я обнаружил, что все эти платформы Gif и APNG используют отдельные CADisplayLinks для их запуска. В моем случае загрузка процессора составляла около 7% на ячейку и росла линейно с количеством ячеек.

Когда я отключил объекты CADisplayLinks, загрузка моего процессора составляла примерно 3% после загрузки.

Для решения я рассматриваю остановку всей анимации после запуска прокрутки или, возможно, использование одиночного файла для управления всеми моими файлами APNG.

Надеюсь это поможет.


ОБНОВИТЬ:

Я пошел дальше и преобразовал все свои файлы APNG в элементы MSSticker, сначала сохранив файлы APNG на диск, а затем создал массив наклеек.

При использовании стикеров загрузка моего процессора составляет 5%, а памяти - 60 МБ для 7 файлов APNG. Мой оригинальный метод использования AImageView для управления каждым APNG получает около 40% загрузки процессора.

Другие вопросы по тегам