Shake Animation в UIView: подробное руководство с примерами кода

Анимация встряхивания может добавить веселый и интерактивный элемент в пользовательский интерфейс вашего приложения для iOS. В этой статье мы рассмотрим различные методы реализации анимации встряхивания с помощью UIView в Swift. Мы предоставим примеры кода, которые помогут вам понять и интегрировать эти анимации в ваши собственные проекты. Давайте погрузимся!

  1. Использование CGAffineTransform:
    Класс CGAffineTransform в UIKit предоставляет методы для применения преобразований к представлениям. Мы можем использовать эти преобразования для создания эффекта встряхивания, применив к виду серию поворотов.
func shakeView(view: UIView) {
    let shakeAnimation = CABasicAnimation(keyPath: "transform.rotation")
    shakeAnimation.duration = 0.1
    shakeAnimation.repeatCount = 2
    shakeAnimation.autoreverses = true
    shakeAnimation.fromValue = -0.05
    shakeAnimation.toValue = 0.05

    view.layer.add(shakeAnimation, forKey: "shakeAnimation")
}
  1. Использование UIView.animate(withDuration:animations:):
    Класс UIView предоставляет удобный метод для анимации свойств представления. Мы можем использовать метод animate(withDuration:animations:)для достижения эффекта встряхивания путем анимации свойства преобразования представления.
func shakeView(view: UIView) {
    UIView.animate(withDuration: 0.1, animations: {
        view.transform = CGAffineTransform(translationX: 10, y: 0)
    }) { (_) in
        UIView.animate(withDuration: 0.1, animations: {
            view.transform = CGAffineTransform(translationX: -10, y: 0)
        }) { (_) in
            UIView.animate(withDuration: 0.1, animations: {
                view.transform = CGAffineTransform.identity
            })
        }
    }
}
  1. Использование CAKeyframeAnimation:
    CAKeyframeAnimation позволяет нам создавать собственные анимации, указывая серию ключевых кадров. Мы можем использовать этот подход для создания анимации встряхивания, применяя последовательность переводов.
func shakeView(view: UIView) {
    let shakeAnimation = CAKeyframeAnimation(keyPath: "position")
    shakeAnimation.values = [NSValue(cgPoint: CGPoint(x: view.center.x - 10, y: view.center.y)),
                             NSValue(cgPoint: CGPoint(x: view.center.x + 10, y: view.center.y)),
                             NSValue(cgPoint: view.center)]
    shakeAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
    shakeAnimation.duration = 0.4

    view.layer.add(shakeAnimation, forKey: "shakeAnimation")
}
  1. Использование UIView.animateKeyframes(withDuration:delay:options:animations:completion:):
    Метод animateKeyframes(withDuration:delay:options:animations:completion:)UIView позволяет нам определять последовательность анимаций на основе ключевых кадров. Мы можем использовать этот метод для создания эффекта дрожания, указав серию ключевых кадров.
func shakeView(view: UIView) {
    UIView.animateKeyframes(withDuration: 0.4, delay: 0, options: [], animations: {
        UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.25) {
            view.transform = CGAffineTransform(translationX: -10, y: 0)
        }
        UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.5) {
            view.transform = CGAffineTransform(translationX: 10, y: 0)
        }
        UIView.addKeyframe(withRelativeStartTime: 0.75, relativeDuration: 0.25) {
            view.transform = CGAffineTransform.identity
        }
    }, completion: nil)
}

В этой статье мы рассмотрели различные методы реализации анимации встряхивания с помощью UIView в Swift. Мы рассмотрели методы с использованием CGAffineTransform, UIView.animate(withDuration:animations:), CAKeyframeAnimation и UIView.animateKeyframes(withDuration:delay:options:animations:completion:). Не стесняйтесь экспериментировать с этими методами и включать анимацию встряхивания в свое приложение для iOS, чтобы улучшить взаимодействие с пользователем.

Не забудьте настроить параметры анимации, такие как продолжительность, величина и время, для достижения желаемого эффекта. Анимация встряхивания может быть отличным способом обеспечить визуальную обратную связь или выделить важные элементы в вашем приложении.