UIKit Dynamics — essentie, fysica van interactie in iOS

Auteur: IT Sectr Gepubliceerd: 2026-03-01 Leestijd: 8 min

UIKit Dynamics — een framework voor fysieke animatie in iOS (UIKit) waarmee Views kunnen interageren volgens de wetten van de echte fysica: zwaartekracht, botsingen, elasticiteit en aantrekkingskrachten. Het artikel legt de componenten van UIDynamicAnimator, soorten gedragingen (behavior) en praktische toepassingsscenario's uit.

Belangrijkste

  • UIDynamicAnimator — de motor van fysieke animatie, die gedragingen (behavior) en objecten verbindt
  • UIGravityBehavior — simulatie van zwaartekracht met richtingsvector en versnellingsgrootte
  • UICollisionBehavior — verwerking van botsingen tussen Views en grenzen van reference view
  • UIDynamicItemBehavior — configuratie van fysieke eigenschappen: elasticiteit, dichtheid, wrijving
  • UIAttachmentBehavior — verbinding tussen twee punten met veer- of kabeleffect

Wat is UIKit Dynamics?

UIKit Dynamics — een framework voor fysieke modellering, geïntroduceerd door Apple in iOS 7 (2013). In tegenstelling tot UIView.animate (lineaire overgangen) en Core Animation (animatie van lagen), modelleert UIKit Dynamics echte fysieke interacties: zwaartekracht, botsingen, krachten, elasticiteit en wrijving. De ontwikkelaar voegt gedragingen (behaviors) toe aan UIDynamicAnimator, en het systeem berekent automatisch de fysica voor elk frame.

Het framework werkt op 60/120 FPS en gebruikt een ingebouwde fysicamotor gebaseerd op rigid body simulation. UIKit Dynamics vereist geen kennis van fysica of wiskunde — het is voldoende om een kant-en-klaar gedrag toe te passen en parameters in te stellen.

Volgens Apple is UIKit Dynamics geschikt voor UI-effecten (animatie van kaartenstapel, "trillen" van iconen, interfacenatuurkunde), maar niet bedoeld voor games — gebruik voor games SceneKit of SpriteKit.

UIDynamicAnimator — fysicamotor

UIDynamicAnimator — de centrale klasse van UIKit Dynamics. Het wordt geïnitialiseerd met een reference view (meestal de view van de controller) en beheert alle actieve gedragingen. Elk frame herberekent UIDynamicAnimator de posities, snelheden en versnellingen van alle toegevoegde elementen met inachtneming van de natuurwetten.

De methode addBehavior voegt één gedrag (of complex UIDynamicBehavior) toe, removeBehavior verwijdert het. De animator pauzeert automatisch wanneer alle objecten een rusttoestand bereiken (zonder botsingen en krachten). De delegate-methode — UIDynamicAnimatorDelegate — meldt pauze en hervatting van de simulatie.

UIDynamicItem — protocol voor animatie

Elk object dat deelneemt aan de fysica moet het protocol UIDynamicItem implementeren. UIView en UICollectionViewLayoutAttributes implementeren het al. Het protocol vereist eigenschappen: bounds, center, transform. Als het object aangepast is — implementeer het protocol handmatig.

Soorten Dynamic Behaviors

UIKit Dynamics bevat zeven ingebouwde soorten gedragingen, die elk een specifiek fysiek effect modelleren. Gedragingen kunnen worden gecombineerd: bijvoorbeeld zwaartekracht + botsingen + elasticiteit creëren het effect van vallende en botsende objecten.

BehaviorFysiek effectBelangrijkste parameters
UIGravityBehaviorZwaartekracht (krachtvector)gravityDirection (dx, dy), magnitude
UICollisionBehaviorBotsingen van objecten en grenzencollisionMode, translucence, collisionDelegate
UIAttachmentBehaviorVerbinding (veer/kabel)anchorPoint, length, damping, frequency
UISnapBehaviorAantrekking naar punt met dempingsnapPoint, damping (0-1)
UIPushBehaviorDuwen/impuls (continu of onmiddellijk)pushDirection, magnitude, mode
UIDynamicItemBehaviorFysieke eigenschappen van objectelasticity, friction, density, resistance
UIFieldBehaviorKrachtvelden (wervel, magneet, straal)position, strength, falloff, region

Combineren van gedragingen

Voor realistische fysica van een object zijn meerdere gedragingen tegelijk nodig. Bijvoorbeeld voor een vallende kaart: UIGravityBehavior (zwaartekracht), UICollisionBehavior (botsing met de bodem), UIDynamicItemBehavior (elasticity: 0.4 voor stuiteren). Alle gedragingen worden aan één UIDynamicAnimator toegevoegd.

Voorbeelden van Swift-code

Swift-code voor UIKit Dynamics maakt een UIDynamicAnimator en voegt gedragingen toe. Het onderstaande voorbeeld demonstreert zwaartekracht met meerdere objecten, botsingen en aangepaste fysieke eigenschappen.

swift
import UIKit

class PhysicsViewController: UIViewController {

    var animator: UIDynamicAnimator!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. Animator met reference view maken
        animator = UIDynamicAnimator(referenceView: view)

        // 2. Vallende objecten maken
        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. Zwaartekracht
        let gravity = UIGravityBehavior(items: [redView, blueView])
        gravity.gravityDirection = CGVector(dx: 0, dy: 1)
        gravity.magnitude = 0.8
        animator.addBehavior(gravity)

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

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

        // 6. Snap-gedrag bij aanraking
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        view.addGestureRecognizer(tap)
    }

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

        // Snap-gedrag voor elk object
        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("Botsing op: (point)")
    }
}

Het voorbeeld creëert twee Views met zwaartekracht, botsingen en fysieke eigenschappen. UISnapBehavior trekt bij aanraking objecten naar het aanraakpunt met een demping van 0.5. UICollisionBehaviorDelegate volgt het begin van botsingen voor geluids- en visuele effecten.

Praktische toepassingsscenario's

UIKit Dynamics wordt in iOS-applicaties toegepast voor niet-game interfacenatuurkunde. Populaire scenario's: animatie van kaartenstapel (UISnapBehavior voor aantrekking naar het midden), scherm schudden bij fout (UIDynamicItemBehavior + UIPushBehavior), effect van "vallende sterren" in onboarding (gravity + collision + field behavior).

Voor prestaties raadt UIKit Dynamics niet meer dan 15-20 gelijktijdige objecten met fysica aan. Elk object vereist berekening van botsingen en krachten in elk frame. Bij overschrijding van de limiet gebruik CALayer in plaats van UIView — Core Animation verwerkt lagen efficiënter.

Veelgestelde vragen

Waarin verschilt UIKit Dynamics van Core Animation?

UIKit Dynamics modelleert fysieke interacties (zwaartekracht, botsingen, krachten) op basis van rigid body simulatie. Core Animation — animatie van CALayer-eigenschappen (position, opacity, transform) volgens een bepaalde tijdscurve. Dynamics is geschikt voor interactieve fysica, Core Animation — voor vooraf gedefinieerde overgangen.

Kan UIKit Dynamics in SwiftUI worden gebruikt?

Directe ondersteuning voor UIKit Dynamics in SwiftUI is er niet. Gebruik voor fysieke effecten UIKitView + UIDynamicAnimator binnen UIViewRepresentable, of aangepaste animaties via Animation.spring() en withAnimation() in SwiftUI.

Hoe stop ik UIKit Dynamics?

Roep animator.removeAllBehaviors() aan — dit verwijdert alle actieve fysieke gedragingen. De animator pauzeert automatisch wanneer alle objecten rust bereiken. Gebruik voor tijdelijke pauze de eigenschap animator.isPaused of verwijder afzonderlijke gedragingen.

Hoeveel objecten kunnen tegelijk worden geanimeerd?

Apple raadt niet meer dan 15-20 objecten met volledige fysica (zwaartekracht + botsingen + krachten) aan. Gebruik voor massa-animaties UIFieldBehavior — dit berekent krachten gecentraliseerd zonder paarsgewijze botsingen, wat de CPU-belasting vermindert.

Samenvatting

  • UIKit Dynamics — iOS-framework voor fysieke animatie met simulatie van zwaartekracht, botsingen en krachten
  • UIDynamicAnimator — motor die gedragingen (behaviors) beheert en per frame de fysica berekent
  • 7 soorten gedragingen — UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior, UISnapBehavior, UIPushBehavior, UIDynamicItemBehavior, UIFieldBehavior
  • Combineren — gravity + collision + itemBehavior creëert realistische valfysica met stuiteren
  • UIDynamicItem — protocol voor objecten die deelnemen aan fysica (UIView implementeert standaard)
  • Beperking — niet meer dan 20 objecten met volledige fysica, niet geschikt voor games en complexe scènes
  • SwiftUI — gebruik UIViewRepresentable voor integratie van UIKit Dynamics

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook