Ответ
UIImage из UIKit поддерживает растровые форматы (PNG, JPEG, TIFF, BMP), но не поддерживает напрямую:
- Векторные форматы (SVG, PDF). Для их отображения требуются сторонние библиотеки (например,
SVGKit,PDFKit) или конвертация вUIImage. - Анимированные форматы (GIF, APNG). При инициализации
UIImage(data:)данными GIF будет показан только первый кадр.
Почему так? UIImage предназначен для работы с растровыми данными. Векторные и анимированные форматы требуют отдельной логики рендеринга и управления кадрами.
Пример и решение для GIF:
// Проблема: UIImage не анимирует GIF
let gifData = try! Data(contentsOf: Bundle.main.url(forResource: "anim", withExtension: "gif")!)
let staticImage = UIImage(data: gifData) // Только первый кадр
// Решение: Использовать специализированную библиотеку
// Например, с SDWebImage:
// animatedImageView.sd_setImage(with: url)
// Или с FLAnimatedImage (для FLAnimatedImageView):
// let animatedImage = FLAnimatedImage(animatedGIFData: gifData)
Альтернативы:
- Для SVG в SwiftUI можно использовать
Imageс рендерингом изData(требуется iOS 13+). - Для анимаций также рассмотрите нативные форматы вроде последовательности изображений или Lottie (JSON-анимации).