Как сделать анимацию «заполняющегося таймера»?

Для создания анимации «заполняющегося таймера» в Swift, вы можете использовать класс CALayer и его свойство strokeEnd.

1. Создайте новый проект в Xcode и откройте файл ViewController.swift.

2. Импортируйте модуль UIKit:

import UIKit

3. Создайте новую функцию, которая будет настраивать анимацию:

func startTimerAnimation() {
    // Создаем путь с формой круга
    let path = UIBezierPath(arcCenter: view.center, radius: 100, startAngle: -.pi / 2, endAngle: .pi * 2, clockwise: true)

    // Создаем слой CAShapeLayer и устанавливаем его путь
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath

    // Настраиваем цвета для заполненной и не заполненной части таймера
    shapeLayer.strokeColor = UIColor.green.cgColor
    shapeLayer.fillColor = UIColor.clear.cgColor

    // Устанавливаем ширину линии для таймера
    shapeLayer.lineWidth = 10

    // Устанавливаем начальное значение strokeEnd в 0
    shapeLayer.strokeEnd = 0

    // Добавляем слой в представление
    view.layer.addSublayer(shapeLayer)

    // Создаем анимацию, которая будет постепенно увеличивать значение strokeEnd до 1
    let animation = CABasicAnimation(keyPath: "strokeEnd")
    animation.toValue = 1
    animation.duration = 10 // Длительность анимации (в секундах)

    // Делаем анимацию плавной
    animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)

    // Добавляем анимацию на слой
    shapeLayer.add(animation, forKey: "timerAnimation")
}

4. Вызывайте функцию startTimerAnimation() в методе viewDidLoad() вашего контроллера или в любом другом месте, где вы хотите запустить анимацию таймера:

override func viewDidLoad() {
    super.viewDidLoad()

    // Вызываем функцию начала анимации
    startTimerAnimation()
}

После запуска вашего приложения вы увидите анимацию таймера, которая будет постепенно заполняться за указанное время (10 секунд в данном примере). Вы также можете настроить значения, такие как радиус круга, цвет заполненной и не заполненной части, ширину линии таймера и длительность анимации, в соответствии с вашими потребностями.