TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
iOS Dev

24 Aug 2022, 09:15

Открыть в Telegram Поделиться Пожаловаться

00:04
Видео недоступно для предпросмотра
Смотреть в Telegram
Что такое phyllotaxis или как повторить анимацию в Wallet и Lock Screen в iOS 16
Оговорюсь, я как и прежде не использую Swift UI в проде, и наверняка код можно сделать чище

С выходом новой iOS многие обратили внимание на крутую анимацию при переходе на заблокированный экран и обратно. Philip Davis в твиттере дополнил, что по факту используемая фигура очень похожа на phyllotaxis (филлотаксис по-русски). Так что же это за зверь такой?

Время нового факта

Филлотаксис — одна из природных загадок, известная со времён Леонардо да Винчи. Название с древнегреческого — «расположение листьев».

Загадочным является наблюдаемое в мире растений геометрически правильное расположение. Вспомните, например, как выглядит подсолнух😏.

Если сосчитать количество однотипных спиралей на поверхности, то с большой вероятностью мы получим одну из пар, образованных двумя соседними числами Фибоначчи.

☺️ Спасибо математикам за псевдокод:

n = caseIndex
base_angle = pi*(1+sqrt(5))
r = sqrt(n)
theta = n*base_angle
x = r*cos(theta)
y = r*sin(theta)

Для упрощения терминологии: n это индекс семечка (у нас это просто кружок, baseAngle некий стартовый угол, r - радиус, x и y — позиции, на которые мы должны поместить наше семечко).

Что ж, попробуем повторить природное явление с помощью Swift!

1️⃣ Создадим GeometryReader, proxy.size будет размером поля. xCenter и yCenter - координаты центра, от которых я отталкивался.

2️⃣ Радиус можно рассчитать по следующей формуле let radius:Double = maxWidth * sqrt(Double(i)). maxWidth это ширина семечка (тех, что ближе к краю поля).

3️⃣ Заполяем поле с помощью CircleInside в зависимости от максимального количества "семечек" внутри поля.

4️⃣ И небольшой эффект анимации: scaleEffect и rotationEffect по тапу.

😎 В итоге получится то, что вы видите на гифке.

@iOS Dev — решаю загадки Да Винчи на Swift.

3.3k 4 96 50
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot