Ответ
1. Кастомный анимированный таймер с интерактивным управлением
- Задача: Создать визуализацию таймера с плавной анимацией прогресса и возможностью изменения времени жестом.
- Решение: Использовал
CAShapeLayerдля отрисовки кругового трека и прогресса. АнимацияstrokeEndчерезCABasicAnimationсCAMediaTimingFunctionдля плавности. Для интерактивности добавилUIPanGestureRecognizer, который пересчитывает время на основе смещения. - Пример кода анимации:
let progressLayer = CAShapeLayer() let animation = CABasicAnimation(keyPath: "strokeEnd") animation.duration = 10.0 animation.fromValue = 0 animation.toValue = 1 animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut) progressLayer.add(animation, forKey: "progressAnimation")
2. Сложная таблица с sticky-заголовками секций, меняющими стиль
- Задача: Реализовать таблицу с заголовками секций, которые прилипают к верху и динамически меняют внешний вид при скролле.
- Решение: Комбинация
UITableViewс кастомнымUICollectionViewв качестве header. Синхронизация скролла через KVO наблюдение заcontentOffset. Изменение стиля заголовка (например, фона или шрифта) вычислялось на основе позиции скролла.
3. Онбординг с параллакс-эффектом и прерываемыми анимациями
- Задача: Создать плавный анимированный онбординг, где переходы между экранами можно прервать свайпом.
- Решение: Использовал
UIViewPropertyAnimatorдля управления интерактивными переходами. Параллакс достигался за счет применения разныхCGAffineTransformк слоям фона и переднего плана. Ключевой момент — корректная пауза, отмена или завершение анимации при прерывании пользователем.