UIKit Dynamics — die Physik der Interaktion in iOS

Autor: IT Sectr Veröffentlicht: 2026-03-01 Lesezeit: 8 Min.

UIKit Dynamics ist ein Framework für physikalische Animationen in iOS (UIKit), das es Views ermöglicht, nach den Gesetzen der realen Physik zu interagieren: Schwerkraft, Kollisionen, Elastizität und Anziehungskräfte. Dieser Artikel erklärt die Komponenten von UIDynamicAnimator, die Arten von Verhaltensweisen (Behavior) und praktische Anwendungsszenarien.

Wichtige Punkte

  • UIDynamicAnimator — die physikalische Animations-Engine, die Verhaltensweisen und Objekte verbindet
  • UIGravityBehavior — Schwerkraftsimulation mit Richtungsvektor und Beschleunigungsgröße
  • UICollisionBehavior — behandelt Kollisionen zwischen Views und Grenzen der reference view
  • UIDynamicItemBehavior — Konfiguration physikalischer Eigenschaften: Elastizität, Dichte, Reibung
  • UIAttachmentBehavior — Verbindung zwischen zwei Punkten mit Feder- oder Seileffekt

Was ist UIKit Dynamics?

UIKit Dynamics ist ein Physiksimulations-Framework, das von Apple in iOS 7 (2013) eingeführt wurde. Im Gegensatz zu UIView.animate (lineare Übergänge) und Core Animation (Ebenenanimation) simuliert UIKit Dynamics reale physikalische Interaktionen: Schwerkraft, Kollisionen, Kräfte, Elastizität und Reibung. Der Entwickler fügt UIDynamicAnimator Verhaltensweisen hinzu, und das System berechnet automatisch die Physik für jeden Frame.

Das Framework läuft mit 60/120 FPS und verwendet eine integrierte Physik-Engine basierend auf Starrkörpersimulation. UIKit Dynamics erfordert keine Kenntnisse in Physik oder Mathematik — wenden Sie einfach ein vorgefertigtes Verhalten an und konfigurieren Sie seine Parameter.

Laut Apple eignet sich UIKit Dynamics für UI-Effekte (Kartenstapel-Animation, Icon-Wackeln, Interface-Physik), ist aber nicht für Spiele gedacht — verwenden Sie für Spiele SceneKit oder SpriteKit.

UIDynamicAnimator — die Physik-Engine

UIDynamicAnimator ist die zentrale Klasse von UIKit Dynamics. Sie wird mit einer reference view (normalerweise die View des Controllers) initialisiert und verwaltet alle aktiven Verhaltensweisen. Jeden Frame berechnet UIDynamicAnimator die Positionen, Geschwindigkeiten und Beschleunigungen aller hinzugefügten Elemente nach physikalischen Gesetzen neu.

Die Methode addBehavior fügt ein Verhalten (oder ein komplexes UIDynamicBehavior) hinzu, removeBehavior entfernt es. Der Animator pausiert automatisch, wenn alle Objekte einen Ruhezustand erreichen (Fortsetzung ohne Kollisionen und Kräfte). Die Delegatmethode — UIDynamicAnimatorDelegate — benachrichtigt über Pause und Wiederaufnahme der Simulation.

UIDynamicItem — Protokoll für Animation

Jedes Objekt, das an der Physik teilnimmt, muss das UIDynamicItem-Protokoll implementieren. UIView und UICollectionViewLayoutAttributes implementieren es bereits. Das Protokoll erfordert die Eigenschaften: bounds, center, transform. Wenn das Objekt benutzerdefiniert ist — implementieren Sie das Protokoll manuell.

Arten von Dynamic Behaviors

UIKit Dynamics enthält sieben integrierte Verhaltenstypen, die jeweils einen bestimmten physikalischen Effekt modellieren. Verhaltensweisen können kombiniert werden: zum Beispiel erzeugen Schwerkraft + Kollisionen + Elastizität den Effekt fallender und abprallender Objekte.

BehaviorPhysikalischer EffektWichtige Parameter
UIGravityBehaviorSchwerkraft (Kraftvektor)gravityDirection (dx, dy), magnitude
UICollisionBehaviorObjekt- und GrenzkollisionencollisionMode, translucence, collisionDelegate
UIAttachmentBehaviorVerbindung (Feder/Seil)anchorPoint, length, damping, frequency
UISnapBehaviorEinrasten mit DämpfungsnapPoint, damping (0-1)
UIPushBehaviorSchub/Impuls (kontinuierlich oder sofort)pushDirection, magnitude, mode
UIDynamicItemBehaviorPhysikalische Objekteigenschaftenelasticity, friction, density, resistance
UIFieldBehaviorKraftfelder (Wirbel, magnetisch, radial)position, strength, falloff, region

Kombination von Verhaltensweisen

Für realistische Objektphysik werden mehrere Verhaltensweisen gleichzeitig benötigt. Zum Beispiel für eine fallende Karte: UIGravityBehavior (Schwerkraft), UICollisionBehavior (Kollision mit dem Boden), UIDynamicItemBehavior (Elastizität: 0,4 für Abprallen). Alle Verhaltensweisen werden zu einem UIDynamicAnimator hinzugefügt.

Swift-Codebeispiele

Swift-Code für UIKit Dynamics erstellt einen UIDynamicAnimator und fügt Verhaltensweisen hinzu. Das folgende Beispiel demonstriert Schwerkraft mit mehreren Objekten, Kollisionen und benutzerdefinierten physikalischen Eigenschaften.

swift
import UIKit

class PhysicsViewController: UIViewController {

    var animator: UIDynamicAnimator!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. Animator mit reference view erstellen
        animator = UIDynamicAnimator(referenceView: view)

        // 2. Fallende Objekte erstellen
        let redView = UIView(frame: CGRect(x: 100, y: 50, width: 60, height: 60))
        redView.backgroundColor = .systemRed
        redView.layer.cornerRadius = 8
        view.addSubview(redView)

        let blueView = UIView(frame: CGRect(x: 200, y: 30, width: 60, height: 60))
        blueView.backgroundColor = .systemBlue
        blueView.layer.cornerRadius = 8
        view.addSubview(blueView)

        // 3. Schwerkraft
        let gravity = UIGravityBehavior(items: [redView, blueView])
        gravity.gravityDirection = CGVector(dx: 0, dy: 1)
        gravity.magnitude = 0.8
        animator.addBehavior(gravity)

        // 4. Kollisionen
        let collision = UICollisionBehavior(items: [redView, blueView])
        collision.translatesReferenceBoundsIntoBoundary = true
        collision.collisionDelegate = self
        animator.addBehavior(collision)

        // 5. Physikalische Eigenschaften
        let itemBehavior = UIDynamicItemBehavior(items: [redView, blueView])
        itemBehavior.elasticity = 0.6
        itemBehavior.friction = 0.3
        itemBehavior.density = 1.0
        animator.addBehavior(itemBehavior)

        // 6. Snap-Verhalten bei Berührung
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        view.addGestureRecognizer(tap)
    }

    @objc
    func handleTap(_ gesture: UITapGestureRecognizer) {
        let point = gesture.location(in: view)

        // Snap-Verhalten für jedes Objekt
        for subview in view.subviews where subview is UIView {
            animator.removeAllBehaviors()
            let snap = UISnapBehavior(item: subview, snapTo: point)
            snap.damping = 0.5
            animator.addBehavior(snap)
        }
    }
}

extension PhysicsViewController: UICollisionBehaviorDelegate {
    func collisionBehavior(_ behavior: UICollisionBehavior,
                             beganContactFor item1: UIDynamicItem,
                             with item2: UIDynamicItem,
                             at point: CGPoint) {
        print("Kollision bei: (Punkt)")
    }
}

Das Beispiel erstellt zwei Views mit Schwerkraft, Kollisionen und physikalischen Eigenschaften. UISnapBehavior bei Berührung schnappt Objekte mit 0,5 Dämpfung zum Berührungspunkt. UICollisionBehaviorDelegate verfolgt den Beginn von Kollisionen für Ton- und visuelle Effekte.

Praktische Anwendungsszenarien

UIKit Dynamics wird in iOS-Anwendungen für nicht-spielbezogene Interface-Physik verwendet. Beliebte Szenarien: Kartenstapel-Animation (UISnapBehavior zum Einrasten in die Mitte), Bildschirmwackeln bei Fehlern (UIDynamicItemBehavior + UIPushBehavior), „Sternschnuppen"-Effekt im Onboarding (gravity + collision + field behavior).

Für die Leistung empfiehlt UIKit Dynamics nicht mehr als 15-20 gleichzeitige Objekte mit Physik. Jedes Objekt erfordert Kollisions- und Kraftberechnungen pro Frame. Bei Überschreitung des Limits verwenden Sie CALayer statt UIView — Core Animation verarbeitet Ebenen effizienter.

Häufig gestellte Fragen

Wie unterscheidet sich UIKit Dynamics von Core Animation?

UIKit Dynamics modelliert physikalische Interaktionen (Schwerkraft, Kollisionen, Kräfte) basierend auf Starrkörpersimulation. Core Animation animiert CALayer-Eigenschaften (position, opacity, transform) entlang einer bestimmten Zeitkurve. Dynamics eignet sich für interaktive Physik, Core Animation für vordefinierte Übergänge.

Kann UIKit Dynamics in SwiftUI verwendet werden?

Es gibt keine direkte Unterstützung für UIKit Dynamics in SwiftUI. Für physikalische Effekte verwenden Sie UIKitView + UIDynamicAnimator innerhalb von UIViewRepresentable oder benutzerdefinierte Animationen über Animation.spring() und withAnimation() in SwiftUI.

Wie stoppt man UIKit Dynamics?

Rufen Sie animator.removeAllBehaviors() auf — dies entfernt alle aktiven physikalischen Verhaltensweisen. Der Animator pausiert automatisch, wenn alle Objekte Ruhe erreichen. Für eine temporäre Pause verwenden Sie die Eigenschaft animator.isPaused oder entfernen einzelne Verhaltensweisen.

Wie viele Objekte können gleichzeitig animiert werden?

Apple empfiehlt nicht mehr als 15-20 Objekte mit voller Physik (Schwerkraft + Kollisionen + Kräfte). Für Massenanimationen verwenden Sie UIFieldBehavior — es berechnet Kräfte zentral ohne paarweise Kollisionen, was die CPU-Last reduziert.

Zusammenfassung

  • UIKit Dynamics — iOS-Framework für physikalische Animation mit Schwerkraft-, Kollisions- und Kraftsimulation
  • UIDynamicAnimator — die Engine, die Verhaltensweisen verwaltet und die Physik pro Frame berechnet
  • 7 Verhaltenstypen — UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior, UISnapBehavior, UIPushBehavior, UIDynamicItemBehavior, UIFieldBehavior
  • Kombination — gravity + collision + itemBehavior erzeugt realistische Fallphysik mit Abprallen
  • UIDynamicItem — Protokoll für physikteilnehmende Objekte (UIView implementiert standardmäßig)
  • Einschränkung — nicht mehr als 20 Objekte mit voller Physik, nicht geeignet für Spiele und komplexe Szenen
  • SwiftUI — UIViewRepresentable zur Integration von UIKit Dynamics verwenden

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch