UIView.animate : qu'est-ce que c'est, animation des propriétés UIView sous iOS

Auteur : IT Sectr Publié le : 2026-03-01 Temps de lecture : 8 min

UIView.animate est la méthode principale pour animer les propriétés UIView sous iOS, implémentée dans UIKit via des blocs avec duration, delay et options. La méthode anime frame, alpha, transform, backgroundColor et d'autres propriétés animables. Cet article décrit la syntaxe, les paramètres, des exemples pratiques et la structure interne des animations UIKit.

Points clés

  • UIView.animate — méthode basée sur des blocs pour animer les propriétés UIView : frame, alpha, transform, backgroundColor
  • Paramètres — duration (sec), delay (sec), options (courbe, répétition, inversion auto), completion (fermeture)
  • Animation Spring — UIView.animate(withDuration:delay:usingSpringWithDamping:) avec rebond physique
  • Animation Keyframe — UIView.animateKeyframes pour des séquences multi-étapes avec timing relatif
  • Core Animation — sous le capot, UIView.animate utilise CABasicAnimation au niveau CALayer

Qu'est-ce que UIView.animate ?

UIView.animate est une méthode statique de la classe UIView, introduite dans iOS 4 (2010). Elle fournit une API déclarative pour animer les propriétés animables de UIView : frame, bounds, center, alpha, transform, backgroundColor. La méthode accepte un bloc (fermeture) avec des modifications de propriétés — le système crée automatiquement CABasicAnimation pour chaque propriété modifiée.

La syntaxe par blocs a remplacé l'ancienne beginAnimations/commitAnimations (iOS 2-3) et est devenue la norme d'animation dans UIKit. Les animations UIView.animate s'exécutent sur le thread principal et ne bloquent pas l'interface utilisateur. Par défaut, la durée d'animation est de 0,25 seconde avec une courbe easeInOut.

Selon Apple WWDC 2023, l'approche d'animation recommandée dans les nouveaux projets est SwiftUI avec les modificateurs .animation() et .transition(), mais UIView.animate reste l'outil principal pour la prise en charge d'iOS 16 et inférieur, ainsi que pour les transitions personnalisées complexes.

Paramètres et options d'animation

UIView.animate fournit trois paramètres clés : duration (durée en secondes), delay (délai avant le début) et options (ensemble de masques de bits UIView.AnimationOptions). Les options incluent curve (easeInOut, easeIn, easeOut, linear), repeat, autoreverse, allowUserInteraction, beginFromCurrentState et overrideInheritedDuration.

ParamètreTypeDescription
durationTimeIntervalDurée de l'animation en secondes (type Double)
delayTimeIntervalDélai avant le début de l'animation
optionsUIView.AnimationOptionsMasque de bits : curve, repeat, autoreverse, layoutSubviews
animations() -> VoidBloc avec modifications des propriétés animables
completion(Bool) -> VoidFermeture après la fin de l'animation

Le paramètre options est combiné via un tableau : [.curveEaseOut, .repeat, .autoreverse]. L'animation avec repeat et autoreverse ramène doucement la View à son état initial et se répète indéfiniment. Pour un nombre fini de répétitions, utilisez animateKeyframes.

Animation Spring via UIView.animate

L'animation Spring ajoute un effet de ressort physique : l'objet ne se contente pas de passer du point A au point B, mais dépasse la cible avec des oscillations amorties. Paramètres : usingSpringWithDamping (amortissement 0-1, où 0 est l'oscillation maximale) et initialSpringVelocity (vitesse initiale du ressort).

Apple recommande usingSpringWithDamping dans la plage 0,4-0,8 pour des animations UI naturelles. Une valeur de 0,5 crée un rebond notable sans sensation de « caoutchouc ». initialSpringVelocity = 1,0 correspond à une vitesse de 1 pt/s. À 0, l'animation démarre à partir du repos.

swift
// Exemple d'animation spring et keyframe
import UIKit

class AnimatedView: UIView {

    func springBounce() {
        // Animation spring avec amortissement
        UIView.animate(
            withDuration: 0.8,
            delay: 0,
            usingSpringWithDamping: 0.5,
            initialSpringVelocity: 1.0,
            options: [.allowUserInteraction],
            animations: {
                self.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
                self.alpha = 0.7
            },
            completion: { _ in
                UIView.animate(withDuration: 0.3) {
                    self.transform = .identity
                    self.alpha = 1.0
                }
            }
        )
    }

    func slideIn(from offset: CGFloat) {
        self.transform = CGAffineTransform(translationX: offset, y: 0)
        self.alpha = 0.0

        UIView.animate(
            withDuration: 0.6,
            delay: 0.1,
            options: [.curveEaseOut]
        ) {
            self.transform = .identity
            self.alpha = 1.0
        }
    }
}

Animation Keyframe

UIView.animateKeyframes permet de diviser une animation en plusieurs étapes (keyframes), chacune avec son propre temps et durée relatifs. La méthode addKeyframe(withRelativeStartTime:relativeDuration:) accepte des valeurs de temps de 0 à 1 relatives à la durée totale de l'animation.

Les animations keyframe sont utiles pour les effets multi-étapes : pulsation de bouton (augmentation → pause → retour), apparition séquentielle d'éléments, déformations complexes avec états intermédiaires. Chaque keyframe peut avoir sa propre courbe d'animation via options.

swift
// Animation keyframe avec séquence complexe
func complexPulse() {
    UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.repeat]) {
        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25) {
            self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            self.alpha = 0.5
        }
        UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25) {
            self.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
            self.alpha = 0.8
        }
        UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5) {
            self.transform = .identity
            self.alpha = 1.0
        }
    }
}

// Animation avec fermetures imbriquées
func animateCardTransition() {
    UIView.animate(withDuration: 0.4, delay: 0, options: [.curveEaseOut]) {
        self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
    } completion: { _ in
        UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseIn]) {
            self.transform = .identity
        }
    }
}

Structure interne : Core Animation sous le capot

Sous le capot, UIView.animate délègue l'animation au CALayer de chaque UIView via Core Animation (CAAnimation). Lorsque vous modifiez le frame dans le bloc d'animation, le système crée CABasicAnimation pour les propriétés position et bounds de la couche correspondante. Si alpha est modifié — CABasicAnimation pour la propriété opacity de la couche.

Core Animation utilise un processus de serveur de rendu séparé (backboardd sur iOS) qui traite les animations à 120 Hz (ProMotion). UIView.animate ne bloque pas le thread principal — les modifications de propriétés sont envoyées au serveur de rendu, qui interpole les images sans intervention de l'application.

Selon Apple, les animations via UIView.animate ont une surcharge d'environ 2-3% de CPU par couche modifiée à 60 FPS. Pour les animations de masse (20+ objets simultanément), il est recommandé d'utiliser CATransaction et la gestion manuelle des couches.

Pour déboguer et visualiser les animations UIKit, utilisez Xcode Debug View Hierarchy — il montre les CAAnimations actives sur chaque couche, leur durée, courbe et état actuel. Comprendre la structure interne de Core Animation aide à éviter les problèmes de performance avec les animations complexes et à choisir l'approche optimale entre UIView.animate et l'utilisation directe de CABasicAnimation.

Pour déboguer et visualiser les animations UIKit, utilisez Xcode Debug View Hierarchy — il montre les CAAnimations actives sur chaque couche, leur durée, courbe et état actuel. Comprendre la structure interne de Core Animation aide à éviter les problèmes de performance avec les animations complexes et à choisir l'approche optimale entre UIView.animate et l'utilisation directe de CABasicAnimation.

Questions fréquentes

Quelles propriétés UIView peuvent être animées ?

Propriétés animables de UIView : frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor. Les modifications de layoutIfNeeded() lors de la modification des contraintes Auto Layout sont également animées. Les autres propriétés ne peuvent pas être animées via UIView.animate — utilisez CALayer ou CADisplayLink pour celles-ci.

Quelle est la différence entre UIView.animate et UIView.animateKeyframes ?

UIView.animate exécute une animation de l'état actuel à l'état cible. UIView.animateKeyframes divise la durée totale en plusieurs étapes (keyframes) avec différents moments de début et durées relatifs. Les keyframes conviennent aux séquences multi-étapes.

Pourquoi UIView.animate ne bloque-t-il pas l'interface utilisateur ?

Les animations UIView.animate sont traitées dans le serveur de rendu (backboardd) — un processus iOS séparé. Le thread principal envoie uniquement les valeurs initiales et finales des propriétés. L'interpolation des images est effectuée sur le GPU via Core Animation à jusqu'à 120 FPS.

Comment arrêter UIView.animate avant la fin ?

Appelez layer.removeAllAnimations() sur le UIView — cela supprime toutes les CAAnimations créées sous le capot. Pour un contrôle plus précis, utilisez CATransaction et des identifiants d'animation via CAAnimation.keyPath.

Résumé

  • UIView.animate — méthode basée sur des blocs pour animer les propriétés UIView avec duration, delay, options et completion
  • Animation Spring — usingSpringWithDamping + initialSpringVelocity pour le rebond physique
  • Animation Keyframe — UIView.animateKeyframes avec addKeyframe pour les séquences multi-étapes
  • Propriétés animables — frame, bounds, center, alpha, transform, backgroundColor
  • Core Animation — sous le capot, UIView.animate crée CABasicAnimation pour CALayer
  • Serveur de rendu — les animations sont traitées à 120 Hz sans bloquer le thread principal
  • SwiftUI — outil recommandé pour les nouveaux projets, UIView.animate pour le support iOS 16-

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi