February 3, 2024

52. Анимируем загрузку через скелетон

Покажу как без особых сложностей сделать красивый скелетон на SwiftUI для iOS 14 и выше с использованием модификатора mask. Бонусом будет состояние "перезагрузка", в котором при нажатии на вьюшку можно выполнить повторный запрос к серверу.

Демо скелетона с возможностью перезагрузки в состоянии ошибки
Демо скелетона с переходом в успешное состояние (контент загружен)
Несколько скелетонов и два состояния ошибки

На что нужно обратить внимание

  1. Все стили в коде (цвета, шрифты, иконка) взяты для примера - смело ставь нужные тебе значения
  2. Если нужно настроить паддинги для скелетона, их можно удобно передать снаружи в качестве EdgeInsets (не стал добавлять в примере кода для краткости)
  3. Если раньше не доводилось работать с маской (mask), обязательно прочитай комментарии в коде внутри метода skeletonIfNeeded и комментарий для linearGradient
  4. Для ReloadModel реализован протокол Equatable, и в нем нельзя сравнивать action 🙂

Код для этой статьи можно посмотреть тут, а другие статьи - тут.