Как сортировать сразу по нескольким свойствам в Swift и избежать при этом pyramid of doom 😱
Сама по себе сортировка довольно проста, если вы делаете ее по одному критерию или одному свойству. В Swift уже есть функция для этого:
🤔Но может возникнуть ситуация, когда вам потребуется сортировка по нескольким критериям или свойствам.
📖 Именно об этом виде сортировки рассказывается в данной статье. Конечно, существует множество способов решения этой проблемы. При этом автор показывает один из самых простых подходов без каких-либо усложнённых концепций.
🧑💻 Вы сами сможете прокачать этот способ для требуемых задач, как только станут понятны основы.
@iOS Dev
Сама по себе сортировка довольно проста, если вы делаете ее по одному критерию или одному свойству. В Swift уже есть функция для этого:
let numbers = [3, 5, 6, 1, 8, 2]
let sortedNumbers = numbers.sorted { (lhs, rhs) in
return lhs < rhs
}
🤔Но может возникнуть ситуация, когда вам потребуется сортировка по нескольким критериям или свойствам.
📖 Именно об этом виде сортировки рассказывается в данной статье. Конечно, существует множество способов решения этой проблемы. При этом автор показывает один из самых простых подходов без каких-либо усложнённых концепций.
🧑💻 Вы сами сможете прокачать этот способ для требуемых задач, как только станут понятны основы.
@iOS Dev
👍20🔥4
3 способа использования enum, которые должны быть в вашем арсенале
💪 Перечисление (enum) - это очень мощный тип в Swift. Каждый из нас использует его практически в каждом проекте.
Сегодня я хотел бы поделиться некоторыми приемами работы с перечислениями в Swift, о которых могут знать не все.
🧐 Если у вас солидный бэкграунд, то вы будете в курсе, но освежить знания не помешает.
В публикации рассматривается три блока:
1️⃣ Сложные случаи с привязкой значений.
2️⃣ Если нас интересуют конкретный кейс перечисления, то можно использовать
3️⃣ Если связанное значение optional, то также можно использовать соответствующий шаблон. Это будет более понятно на конкретных примерах из статьи.
@iOS Dev
💪 Перечисление (enum) - это очень мощный тип в Swift. Каждый из нас использует его практически в каждом проекте.
Сегодня я хотел бы поделиться некоторыми приемами работы с перечислениями в Swift, о которых могут знать не все.
🧐 Если у вас солидный бэкграунд, то вы будете в курсе, но освежить знания не помешает.
В публикации рассматривается три блока:
1️⃣ Сложные случаи с привязкой значений.
2️⃣ Если нас интересуют конкретный кейс перечисления, то можно использовать
if let
и guard let
.3️⃣ Если связанное значение optional, то также можно использовать соответствующий шаблон. Это будет более понятно на конкретных примерах из статьи.
@iOS Dev
👍12🔥3❤2🤔2
Конфигурация кнопок в iOS 15: основные стили и возможности кастомизации.
📖 Написал статью про кастомизацию кнопок в iOS 15, возможно, вы откроете для себя что-то новое.
Можно прочесть про основные стили, конфигурацию, а также, например, про то, как за 10 секунд добавить activityIndicator для кнопки.
📖 Написал статью про кастомизацию кнопок в iOS 15, возможно, вы откроете для себя что-то новое.
Можно прочесть про основные стили, конфигурацию, а также, например, про то, как за 10 секунд добавить activityIndicator для кнопки.
Telegraph
Конфигурация кнопок в iOS 15
В iOS 15 компания Apple значительно обновила кнопки. Мы можем создавать и обновлять конфигурации кнопок подобно изменениям, которые Apple ввела для ячеек коллекции и таблиц в iOS 14.
👍17🔥4
Xcode поставляется со своей версией Swift, и мы всегда можем обратиться к этому списку. Иногда бывает ситуация, когда обновлять Swift для своего проекта не лучший вариант в текущий момент. Для более старой версии Swift, можно сделать следующее:
1️⃣ Проверьте версию Swift:
2️⃣ Узнайте местонахождение:
3️⃣ Установите альтернативный набор инструментов Swift, если требуется:
— На этом ресурсе можно скачать нужный вариант. Установите его, он будет располагаться тут:
— Проверьте идентификатор:
Например,
— С идентификатором теперь можно выбирать, какой нужен набор инструментов:
Как альтернатива, можно создать переменную окружения:
Для проверки, что всё ок, используйте 1️⃣ и 2️⃣ шаги.
@iOS Dev
1️⃣ Проверьте версию Swift:
xcrun swift --version
2️⃣ Узнайте местонахождение:
xcrun -f swift
3️⃣ Установите альтернативный набор инструментов Swift, если требуется:
— На этом ресурсе можно скачать нужный вариант. Установите его, он будет располагаться тут:
/Library/Developer/Toolchains
— Проверьте идентификатор:
cat /Library/Developer/Toolchains/swift-5.5-RELEASE.xctoolchain/Info.plist
Например,
CFBundleIdentifier
для org.swift.550202109201a
— С идентификатором теперь можно выбирать, какой нужен набор инструментов:
xcodebuild -toolchain org.swift.550202109201a
xcrun -toolchain org.swift.550202109201a
Как альтернатива, можно создать переменную окружения:
export TOOLCHAINS=org.swift.550202109201a
Для проверки, что всё ок, используйте 1️⃣ и 2️⃣ шаги.
@iOS Dev
👍6🔥3
Туториал для начинаюших по Bezier Paths и Shape Layers
Существуют разные способы и разные подходы к тому, как нарисовать "экран" приложения:
— Использовать полученную графику от дизайнеров.
— Реализовать UI в коде.
— Использовать Interface Builder.
— Комбинации способов выше и другие варианты.
🛠Однако иногда компоненты нужно создать программно, и тогда могут возникнуть сложности.
ℹ️ Этих проблем можно избежать, используя класс
📖 В этой статье предлагается практическое руководство по созданию Bezier Paths. Автор рассматривает серию небольших, но понятных примеров, и знакомит нас с обеими концепциями.
😉 Как говорится, от простого к сложному, шаг за шагом!
@iOS Dev
Существуют разные способы и разные подходы к тому, как нарисовать "экран" приложения:
— Использовать полученную графику от дизайнеров.
— Реализовать UI в коде.
— Использовать Interface Builder.
— Комбинации способов выше и другие варианты.
🛠Однако иногда компоненты нужно создать программно, и тогда могут возникнуть сложности.
ℹ️ Этих проблем можно избежать, используя класс
UIBezierPath
, который необходим для создания векторных контуров. С его помощью можно создавать и простые фигуры, например прямоугольники, квадраты, овалы и круги, и очень сложные, добавляя прямые и изогнутые линии для набора точек.📖 В этой статье предлагается практическое руководство по созданию Bezier Paths. Автор рассматривает серию небольших, но понятных примеров, и знакомит нас с обеими концепциями.
😉 Как говорится, от простого к сложному, шаг за шагом!
@iOS Dev
👍14🔥5
Как повысить энергоэффективность приложения, если у вас много таймеров, но не все они критичны?
Добавление порога допуска таймера — это простой способ снизить его энергопотребление. Это позволяет задать некоторую свободу действий для системы при выполнении таймера в случаях, если вы можете сказать:
"Я бы хотел, чтобы это выполнялось раз в секунду, но если это произойдет на 200 миллисекунд позже, то в целом тоже норм".
🧐 Это позволяет системе выполнять timer coalescing (если попроще, то что-то вроде объединения), когда несколько событий таймера собираются вместе для экономии заряда батареи.
Например, если вы просите запустить таймер через 1 секунду с допуском 0,5 секунды, он может быть запущен через 1 секунду, 1,5 секунды, 1,3 секунды и так далее.
При этом таймер никогда не будет запущен раньше — допуск добавляет время после запрошенной даты выполнения.
🛠 Пример кода создает таймер, который будет запускаться с допуском в 0,2 сек.
@iOS Dev
Добавление порога допуска таймера — это простой способ снизить его энергопотребление. Это позволяет задать некоторую свободу действий для системы при выполнении таймера в случаях, если вы можете сказать:
"Я бы хотел, чтобы это выполнялось раз в секунду, но если это произойдет на 200 миллисекунд позже, то в целом тоже норм".
🧐 Это позволяет системе выполнять timer coalescing (если попроще, то что-то вроде объединения), когда несколько событий таймера собираются вместе для экономии заряда батареи.
Например, если вы просите запустить таймер через 1 секунду с допуском 0,5 секунды, он может быть запущен через 1 секунду, 1,5 секунды, 1,3 секунды и так далее.
При этом таймер никогда не будет запущен раньше — допуск добавляет время после запрошенной даты выполнения.
🛠 Пример кода создает таймер, который будет запускаться с допуском в 0,2 сек.
@iOS Dev
👍20👏1
Бинго для WWDC 2022 6 июня
📺 Осталась неделя до Worldwide Developers Conference (она же даб-даб ди си, она же даб-даб).
В интернете на сегодняшний день собралось довольно много слухов и рациональных предположений.
😎 А чтобы наблюдать за событием 6 июня было интереснее, я сделал бинго с тем, что мы можем услышать или увидеть. Предлагаю его вашему вниманию.
📔 Сохраните себе, вдруг пригодится!
@iOS Dev
📺 Осталась неделя до Worldwide Developers Conference (она же даб-даб ди си, она же даб-даб).
В интернете на сегодняшний день собралось довольно много слухов и рациональных предположений.
😎 А чтобы наблюдать за событием 6 июня было интереснее, я сделал бинго с тем, что мы можем услышать или увидеть. Предлагаю его вашему вниманию.
📔 Сохраните себе, вдруг пригодится!
@iOS Dev
👍9❤4🔥4
Перебор элементов и индексов в коллекциях Swift
🤔Автор считает, что
Интовое значение через
🧑💻 Для перебора элементов и индексов можно использовать функцию
Можем отказаться от
📖 Кстати! В этой статье можно почитать, как использовать zip для объединения двух массивов.
@iOS Dev
🤔Автор считает, что
enumerated()
для получения элементов и индексов не самый правильный способ и предлагает альтернативу.Интовое значение через
enumerated()
не должно использоваться в качестве индекса, если только коллекция не zero-based и не индексирована целыми числами. Это счетчик, который всегда начинается с нуля.🧑💻 Для перебора элементов и индексов можно использовать функцию
zip()
.// Array<String>
var ingredients = ["potatoes", "cheese", "cream"]
// Array<String>.SubSequence
var doubleIngredients = ingredients.dropFirst()
for (i, ingredient) in zip(
doubleIngredients.indices, doubleIngredients
) {
// do something with the index
doubleIngredients[i] = "\(ingredient) x 2"
}
Можем отказаться от
enumerated()
и считать элементы с помощью функции zip()
. Это можно использовать для продвинутого контроля, начинаем ли считать с 0 или с 1.📖 Кстати! В этой статье можно почитать, как использовать zip для объединения двух массивов.
@iOS Dev
👍10🔥2
Повышаем рейтинг приложений с помощью SKStoreReviewController 💪
📖 В статье автор напоминает правила для показа системного алерта:
— Запрос на оценку будет показан пользователю не более трех раз в течение 365 дней.
— Невозможно узнать, появился ли запрос на оценку.
— Мы не узнаем выбор пользователя (нажал или скипнул).
💡Это, конечно, неприятно. Но вместе с тем рассматривается важность подобных оценок и отзывов, и приводится один из примеров нужных таймингов:
— Просим оценить только тех, кто установил приложение более 7 дней назад.
— Запрашивайте оценку 1 раз для каждой версии.
— У пользователя должно быть минимальное количество сессий.
— Нужно определить, что пользователь попробовал целевые функции перед оценкой.
Кроме этого, автор показывает пример нужного конфига.
🛠 И не забывает напомнить нам, что для отзыва пользователь может и перейти по ссылке:
Здесь XXXXXXXXXX — айди нашего приложения в сторе.
@iOS Dev
📖 В статье автор напоминает правила для показа системного алерта:
— Запрос на оценку будет показан пользователю не более трех раз в течение 365 дней.
— Невозможно узнать, появился ли запрос на оценку.
— Мы не узнаем выбор пользователя (нажал или скипнул).
💡Это, конечно, неприятно. Но вместе с тем рассматривается важность подобных оценок и отзывов, и приводится один из примеров нужных таймингов:
— Просим оценить только тех, кто установил приложение более 7 дней назад.
— Запрашивайте оценку 1 раз для каждой версии.
— У пользователя должно быть минимальное количество сессий.
— Нужно определить, что пользователь попробовал целевые функции перед оценкой.
Кроме этого, автор показывает пример нужного конфига.
🛠 И не забывает напомнить нам, что для отзыва пользователь может и перейти по ссылке:
"https://apps.apple.com/app/idXXXXXXXXXX?action=write-review"
Здесь XXXXXXXXXX — айди нашего приложения в сторе.
@iOS Dev
👍10🔥1
Apple продолжает подготовку к WWDC, которая должна начаться в понедельник
💻 Cегодня компания запустила прямую трансляцию на YouTube, где зрители могут зарегистрироваться, чтобы получить напоминание о начале мероприятия.
🌐 Стрим также можно будет найти на этой странице.
🗓 Напоминаю дату начала: 6 июня, в 20:00 по московскому времени.
💻 Cегодня компания запустила прямую трансляцию на YouTube, где зрители могут зарегистрироваться, чтобы получить напоминание о начале мероприятия.
🌐 Стрим также можно будет найти на этой странице.
🗓 Напоминаю дату начала: 6 июня, в 20:00 по московскому времени.
👍10🔥5
Открыта запись в Digital Lounges!
🤩 Кроме анонса WWDC, компания Apple открыла регистрацию в Digital Lounges.
Они предназначены для того, чтобы разработчики могли напрямую общаться с инженерами и дизайнерами Apple для получения рекомендаций.
✍️ Участники программы Apple Developer Program и победители конкурса Swift Student Challenge 2022 могут зарегистрироваться в Digital Lounges на сайте WWDC или в приложении Apple Developer.
🤩 Кроме анонса WWDC, компания Apple открыла регистрацию в Digital Lounges.
Они предназначены для того, чтобы разработчики могли напрямую общаться с инженерами и дизайнерами Apple для получения рекомендаций.
✍️ Участники программы Apple Developer Program и победители конкурса Swift Student Challenge 2022 могут зарегистрироваться в Digital Lounges на сайте WWDC или в приложении Apple Developer.
🔥9👍2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
А ещё на странице мероприятия доступно открытие паков с карточками в дополненной реальности.
🤗 Каждая карточка это Memoji с разработчиком, генерятся случайно.
😉 Чтобы открыть пак, перейдите по ссылке с мобильного телефона и используйте двойное нажатие по картинке.
@iOS Dev
🤗 Каждая карточка это Memoji с разработчиком, генерятся случайно.
😉 Чтобы открыть пак, перейдите по ссылке с мобильного телефона и используйте двойное нажатие по картинке.
@iOS Dev
👍9🔥5
Пример создания приложения Todo list для iOS с использованием VIPER
🤔 Решение о том, какую архитектуру приложения использовать при создании iOS-приложения, является одной из самых сложных задач.
Существует множество архитектур на выбор: MVC, MVVM, MVP, View State, VIPER и многие другие.
Архитектура, которую мы выберем, будет определять, как будет построено программное обеспечение и как оно будет масштабироваться по мере роста.
📖 Одной из архитектур, о которой идёт речь в этой статье, является архитектура VIPER.
VIPER разделяет структуру приложения на компоненты внутри модуля/экрана с принципом единой ответственности.
Благодаря этому приложение становится более модульным и менее связанным с другими компонентами.
👌 Юнит-тестирование и интеграционное тестирование становятся намного проще из-за границ (протокол/интерфейс) между каждым компонентом.
🛠 Вот тут доступен код приложения, если вы предпочитаете сразу перейти к самому интересному.
@iOS Dev
🤔 Решение о том, какую архитектуру приложения использовать при создании iOS-приложения, является одной из самых сложных задач.
Существует множество архитектур на выбор: MVC, MVVM, MVP, View State, VIPER и многие другие.
Архитектура, которую мы выберем, будет определять, как будет построено программное обеспечение и как оно будет масштабироваться по мере роста.
📖 Одной из архитектур, о которой идёт речь в этой статье, является архитектура VIPER.
VIPER разделяет структуру приложения на компоненты внутри модуля/экрана с принципом единой ответственности.
Благодаря этому приложение становится более модульным и менее связанным с другими компонентами.
👌 Юнит-тестирование и интеграционное тестирование становятся намного проще из-за границ (протокол/интерфейс) между каждым компонентом.
🛠 Вот тут доступен код приложения, если вы предпочитаете сразу перейти к самому интересному.
@iOS Dev
👍15🔥5
Генерация собственного QR-кода (и не только) в Swift
📖 Давайте посмотрим, как мы можем использовать Swift для создания различных типов штрихкодов и QR-кодов.
Вам не нужны сторонние библиотеки, которые могли бы поддерживать эту функциональность, ведь вы можете создавать самые разные типы QR и штрих-кодов сами, используя родной Swift 😉.
В рамках этого туториала приводятся примеры генерации для:
1️⃣ Aztec Barcode.
2️⃣ QRCode.
3️⃣ PDF417.
4️⃣ Code128.
@iOS Dev
📖 Давайте посмотрим, как мы можем использовать Swift для создания различных типов штрихкодов и QR-кодов.
Вам не нужны сторонние библиотеки, которые могли бы поддерживать эту функциональность, ведь вы можете создавать самые разные типы QR и штрих-кодов сами, используя родной Swift 😉.
В рамках этого туториала приводятся примеры генерации для:
1️⃣ Aztec Barcode.
2️⃣ QRCode.
3️⃣ PDF417.
4️⃣ Code128.
@iOS Dev
👍12🔥5❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Как симулировать изменение местоположения в реальном времени с помощью Xcode?
😎Автор этого туториала работал в Porsche, а большую часть своего времени посвящал работе над новым навигационным SDK.
Для успешной разработки SDK нужен был способ имитации изменения местоположения пользователя. В частности, в компании хотели оценить производительность различных навигационных алгоритмов, тестируя их на одном и том же наборе обновлений местоположения.
💻 К счастью, мы можем легко воспроизвести обновления местоположения, используя файлы
ℹ️ Кстати! Если захотите сделать собственный кастомный путь, то можно воспользоваться этим сайтом.
@iOS Dev
😎Автор этого туториала работал в Porsche, а большую часть своего времени посвящал работе над новым навигационным SDK.
Для успешной разработки SDK нужен был способ имитации изменения местоположения пользователя. В частности, в компании хотели оценить производительность различных навигационных алгоритмов, тестируя их на одном и том же наборе обновлений местоположения.
💻 К счастью, мы можем легко воспроизвести обновления местоположения, используя файлы
.gpx
в Xcode. Файл .gpx
, по сути, представляет собой отображение точек GPS во времени, а указание метки времени для каждой GPS-координаты позволяет имитировать ходьбу, езду на велосипеде или вождение автомобиля по шоссе.ℹ️ Кстати! Если захотите сделать собственный кастомный путь, то можно воспользоваться этим сайтом.
@iOS Dev
👍11🔥4
Почисти Derived Data
🤔 Часто слышали/говорили эту фразу?
Удаление Derived Data — известный способ, о котором мы вспоминаем, когда Xcode ведет себя странно.
📖 Автор статьи до сих пор помнит, как ему в первый раз рассказали об этом трюке. И хотя DerivedData может меняться с каждой версией Xcode, почему бы не уделить пару минут и не почитать, что там внутри?
Я решил пойти дальше, и посмотреть, к чему приводит игнорирование особенностей DerivedData.
Здесь рассказывается о сложностях при работе с Jenkins CI server, запущенным как Launch Daemon.
Практический совет на будущее — регулярно чистить DerivedData Xcode на CI-сервере.
📺 Хотите копнуть глубже? Есть годное видео с WWDC 2018, которое объясняет, что происходит за кулисами в процессе сборки.
@iOS Dev
🤔 Часто слышали/говорили эту фразу?
Удаление Derived Data — известный способ, о котором мы вспоминаем, когда Xcode ведет себя странно.
📖 Автор статьи до сих пор помнит, как ему в первый раз рассказали об этом трюке. И хотя DerivedData может меняться с каждой версией Xcode, почему бы не уделить пару минут и не почитать, что там внутри?
Я решил пойти дальше, и посмотреть, к чему приводит игнорирование особенностей DerivedData.
Здесь рассказывается о сложностях при работе с Jenkins CI server, запущенным как Launch Daemon.
Практический совет на будущее — регулярно чистить DerivedData Xcode на CI-сервере.
📺 Хотите копнуть глубже? Есть годное видео с WWDC 2018, которое объясняет, что происходит за кулисами в процессе сборки.
@iOS Dev
🔥8👍3❤1
Генерация кода запроса с помощью Postman за 10 секунд
😎 Уверен, что многие разработчики использовали Postman для тестирования своих запросов, да и вообще для проверки того, что API работает. Так вот, знали ли вы о возможности генерить код запроса, в том числе для Swift, прямо из приложения?
🛠 Если вам лень, то вы можете нажать на кнопку Code, и в выпадающем списке выбрать нужный язык, в нашем случае — Swift.
@iOS Dev
😎 Уверен, что многие разработчики использовали Postman для тестирования своих запросов, да и вообще для проверки того, что API работает. Так вот, знали ли вы о возможности генерить код запроса, в том числе для Swift, прямо из приложения?
🛠 Если вам лень, то вы можете нажать на кнопку Code, и в выпадающем списке выбрать нужный язык, в нашем случае — Swift.
@iOS Dev
👍22🔥1
Туториал по custom transitions в iOS. Прокачиваем стандартные push, pop и modal
📖 В этом руководстве вы узнаете, как заменить push, pop и modal анимации пользовательскими переходами.
🛠Примеры кода находится в репозитории, в нем вы найдете возможности замены стандартных анимаций навигации push & pop на собственные.
Также автор реализовал кастомную модальную анимацию, в которой используются интерактивные переходы.
😉 Очевидно, что есть много разных возможностей, но в этой статье даётся понимание, с чего начать.
@iOS Dev
📖 В этом руководстве вы узнаете, как заменить push, pop и modal анимации пользовательскими переходами.
🛠Примеры кода находится в репозитории, в нем вы найдете возможности замены стандартных анимаций навигации push & pop на собственные.
Также автор реализовал кастомную модальную анимацию, в которой используются интерактивные переходы.
😉 Очевидно, что есть много разных возможностей, но в этой статье даётся понимание, с чего начать.
@iOS Dev
👍13🔥2
Полное руководство по архитектуре VIPER
📖 В материале с таким названием предлагается узнать, как писать масштабируемый код с использованием VIPER и некоторыми приемами из других архитектур.
Я согласен с автором по многим пунктам.
🧐 Во-первых, НЕ стоит думать, что VIPER — это плохо потому, что кто-то неправильно им воспользовался. MVP хорош для приложения с небольшим объёмом экранов, и я согласен с тем, что не следует использовать VIPER для таких приложений.
🤔 Проблемы могут начаться, когда в приложение попадает все больше компонентов. И вот тут стоит задуматься, а точно ли всё хорошо?
Если в ваших планах небольшое приложение, можно начать с MVC. Позже можно решить проблему массивных контроллеров с помощью MVVM, также подойдет MVP или паттерн координатора.
Автор заверяет, что плохой архитектуры не бывает. Есть плохой выбор, который приводит нас к сложной кодовой базе.
🛠Чтобы писать по-настоящему масштабируемые приложения, можно познакомиться с VIPER с конструктором модулей = VIPER(B).
@iOS Dev
📖 В материале с таким названием предлагается узнать, как писать масштабируемый код с использованием VIPER и некоторыми приемами из других архитектур.
Я согласен с автором по многим пунктам.
🧐 Во-первых, НЕ стоит думать, что VIPER — это плохо потому, что кто-то неправильно им воспользовался. MVP хорош для приложения с небольшим объёмом экранов, и я согласен с тем, что не следует использовать VIPER для таких приложений.
🤔 Проблемы могут начаться, когда в приложение попадает все больше компонентов. И вот тут стоит задуматься, а точно ли всё хорошо?
Если в ваших планах небольшое приложение, можно начать с MVC. Позже можно решить проблему массивных контроллеров с помощью MVVM, также подойдет MVP или паттерн координатора.
Автор заверяет, что плохой архитектуры не бывает. Есть плохой выбор, который приводит нас к сложной кодовой базе.
🛠Чтобы писать по-настоящему масштабируемые приложения, можно познакомиться с VIPER с конструктором модулей = VIPER(B).
@iOS Dev
👍14🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Wave — опенсорсное решение для анимаций
Wave — это анимационный движок для iOS и iPadOS. С его помощью легко создавать плавные, интерактивные и прерываемые анимации, которые приятно выглядят.
Согласно заявлениям разработчиков, Wave не имеет внешних зависимостей и может быть легко внедрен в существующие проекты и приложения на базе UIKit.
😉 Основная особенность Wave заключается в том, что все анимации являются ретаргетируемыми. Например, вы можете изменить конечную точку в процессе, и анимация будет изящно перенаправлена на это новое значение.
🛠 Код и пример приложения доступен на Github.
#opensource
@iOS Dev
Wave — это анимационный движок для iOS и iPadOS. С его помощью легко создавать плавные, интерактивные и прерываемые анимации, которые приятно выглядят.
Согласно заявлениям разработчиков, Wave не имеет внешних зависимостей и может быть легко внедрен в существующие проекты и приложения на базе UIKit.
😉 Основная особенность Wave заключается в том, что все анимации являются ретаргетируемыми. Например, вы можете изменить конечную точку в процессе, и анимация будет изящно перенаправлена на это новое значение.
🛠 Код и пример приложения доступен на Github.
#opensource
@iOS Dev
🔥22👍5