UIKit Dynamics — esensya, pisika ng interaksyon sa iOS

May-akda: IT Sectr Nai-publish: 2026-03-01 Oras ng pagbabasa: 8 min

UIKit Dynamics — isang framework ng pisikal na animasyon sa iOS (UIKit) na nagpapahintulot sa View na makipag-ugnayan ayon sa mga batas ng tunay na pisika: gravity, banggaan, elasticity, at mga puwersa ng atraksyon. Ipinapaliwanag ng artikulo ang mga bahagi ng UIDynamicAnimator, mga uri ng behavior, at mga praktikal na sitwasyon ng paggamit.

Mga Pangunahing Punto

  • UIDynamicAnimator — ang engine ng pisikal na animasyon, nag-uugnay ng mga behavior at bagay
  • UIGravityBehavior — simulation ng gravity na may direction vector at magnitude ng acceleration
  • UICollisionBehavior — paghawak ng mga banggaan sa pagitan ng View at mga hangganan ng reference view
  • UIDynamicItemBehavior — pagsasaayos ng pisikal na katangian: elasticity, density, friction
  • UIAttachmentBehavior — koneksyon sa pagitan ng dalawang punto na may spring o cable effect

Ano ang UIKit Dynamics?

UIKit Dynamics — isang framework ng pisikal na pagmomodelo na ipinakilala ng Apple sa iOS 7 (2013). Hindi tulad ng UIView.animate (mga linear na transisyon) at Core Animation (animasyon ng mga layer), ginagaya ng UIKit Dynamics ang tunay na pisikal na interaksyon: gravity, banggaan, puwersa, elasticity, at friction. Nagdadagdag ang developer ng mga behavior sa UIDynamicAnimator, at awtomatikong kinakalkula ng system ang pisika para sa bawat frame.

Ang framework ay gumagana sa 60/120 FPS at gumagamit ng built-in na physics engine batay sa rigid body simulation. Ang UIKit Dynamics ay hindi nangangailangan ng kaalaman sa pisika o matematika — sapat na mag-apply ng handa na behavior at i-configure ang mga parameter.

Ayon sa Apple, ang UIKit Dynamics ay angkop para sa UI effect (animasyon ng stack ng cards, "panginginig" ng mga icon, pisika ng interface), ngunit hindi para sa mga laro — para sa mga laro gamitin ang SceneKit o SpriteKit.

UIDynamicAnimator — engine ng pisika

UIDynamicAnimator — ang sentral na klase ng UIKit Dynamics. Ito ay na-initialize na may reference view (karaniwang view ng controller) at namamahala sa lahat ng aktibong behavior. Bawat frame, muling kinakalkula ng UIDynamicAnimator ang mga posisyon, bilis, at acceleration ng lahat ng idinagdag na elemento ayon sa mga batas ng pisika.

Ang paraang addBehavior ay nagdaragdag ng isang behavior (o kumplikadong UIDynamicBehavior), removeBehavior — nag-aalis. Awtomatikong humihinto ang Animator kapag ang lahat ng bagay ay umabot sa state ng pahinga (walang banggaan at puwersa). Ang paraang delegate — UIDynamicAnimatorDelegate — ay nag-aabiso tungkol sa pause at pagpapatuloy ng simulation.

UIDynamicItem — protocol para sa animasyon

Bawat bagay na kalahok sa pisika ay dapat magpatupad ng protocol na UIDynamicItem. Ang UIView at UICollectionViewLayoutAttributes ay naiimplementa na ito. Ang protocol ay nangangailangan ng mga property: bounds, center, transform. Kung ang bagay ay custom — implementahin ang protocol nang manu-mano.

Mga Uri ng Dynamic Behaviors

UIKit Dynamics ay may pitong built-in na uri ng behavior, bawat isa ay gumagaya ng tiyak na pisikal na epekto. Ang mga behavior ay maaaring pagsamahin: halimbawa, gravity + banggaan + elasticity ay lumilikha ng epekto ng mga bumabagsak at tumatalbog na bagay.

BehaviorPisikal na EpektoMga Pangunahing Parameter
UIGravityBehaviorGravity (vector ng puwersa)gravityDirection (dx, dy), magnitude
UICollisionBehaviorBanggaan ng mga bagay at hangganancollisionMode, translucence, collisionDelegate
UIAttachmentBehaviorKoneksyon (spring/kable)anchorPoint, length, damping, frequency
UISnapBehaviorPag-akit sa punto na may dampingsnapPoint, damping (0-1)
UIPushBehaviorPagtulak/impulse (tuloy-tuloy o instant)pushDirection, magnitude, mode
UIDynamicItemBehaviorPisikal na katangian ng bagayelasticity, friction, density, resistance
UIFieldBehaviorField ng puwersa (vortex, magnet, radius)position, strength, falloff, region

Pagsasama-sama ng mga behavior

Para sa makatotohanang pisika ng isang bagay, kailangan ng maraming behavior nang sabay-sabay. Halimbawa, para sa bumabagsak na card: UIGravityBehavior (gravity force), UICollisionBehavior (banggaan sa ilalim), UIDynamicItemBehavior (elasticity: 0.4 para sa pagtalbog). Lahat ng behavior ay idinadagdag sa isang UIDynamicAnimator.

Mga Halimbawa ng Code sa Swift

Ang Swift code para sa UIKit Dynamics ay lumilikha ng UIDynamicAnimator at nagdaragdag ng mga behavior. Ipinapakita ng halimbawa sa ibaba ang gravity na may maraming bagay, banggaan, at custom na pisikal na katangian.

swift
import UIKit

class PhysicsViewController: UIViewController {

    var animator: UIDynamicAnimator!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. Gumagawa ng animator na may reference view
        animator = UIDynamicAnimator(referenceView: view)

        // 2. Gumagawa ng mga bumabagsak na bagay
        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. Gravity
        let gravity = UIGravityBehavior(items: [redView, blueView])
        gravity.gravityDirection = CGVector(dx: 0, dy: 1)
        gravity.magnitude = 0.8
        animator.addBehavior(gravity)

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

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

        // 6. Snap behavior sa pagpindot
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        view.addGestureRecognizer(tap)
    }

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

        // Snap behavior para sa bawat bagay
        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("Banggaan sa: (point)")
    }
}

Ang halimbawa ay lumilikha ng dalawang View na may gravity, banggaan, at pisikal na katangian. Ang UISnapBehavior sa pagpindot ay umaakit ng mga bagay sa punto ng pagpindot na may damping na 0.5. Ang UICollisionBehaviorDelegate ay sumusubaybay sa simula ng mga banggaan para sa sound at visual effect.

Mga Praktikal na Senaryo ng Paggamit

UIKit Dynamics ay ginagamit sa iOS applications para sa non-game na pisika ng interface. Mga sikat na senaryo: animasyon ng stack ng cards (UISnapBehavior para sa pag-akit sa gitna), pag-alog ng screen sa error (UIDynamicItemBehavior + UIPushBehavior), epekto ng "bumabagsak na mga bituin" sa onboarding (gravity + collision + field behavior).

Para sa performance, inirerekomenda ng UIKit Dynamics na hindi hihigit sa 15-20 sabay-sabay na bagay na may pisika. Bawat bagay ay nangangailangan ng kalkulasyon ng banggaan at puwersa sa bawat frame. Kapag lumampas sa limitasyon, gumamit ng CALayer sa halip na UIView — mas efficient na pinoproseso ng Core Animation ang mga layer.

Mga Madalas Itanong

Ano ang pagkakaiba ng UIKit Dynamics sa Core Animation?

UIKit Dynamics ay gumagaya ng pisikal na interaksyon (gravity, banggaan, puwersa) batay sa rigid body simulation. Core Animation — animasyon ng mga property ng CALayer (position, opacity, transform) ayon sa tiyak na time curve. Ang Dynamics ay angkop para sa interactive na pisika, Core Animation — para sa mga paunang natukoy na transisyon.

Maaari bang gamitin ang UIKit Dynamics sa SwiftUI?

Walang direktang suporta para sa UIKit Dynamics sa SwiftUI. Para sa pisikal na epekto, gamitin ang UIKitView + UIDynamicAnimator sa loob ng UIViewRepresentable, o custom na animasyon sa pamamagitan ng Animation.spring() at withAnimation() sa SwiftUI.

Paano ihihinto ang UIKit Dynamics?

Tumawag ng animator.removeAllBehaviors() — aalisin nito ang lahat ng aktibong pisikal na behavior. Awtomatikong humihinto ang Animator kapag ang lahat ng bagay ay umabot sa pahinga. Para sa pansamantalang pause, gamitin ang property na animator.isPaused o alisin ang mga indibidwal na behavior.

Ilang bagay ang maaaring i-animate nang sabay-sabay?

Inirerekomenda ng Apple na hindi hihigit sa 15-20 bagay na may buong pisika (gravity + banggaan + puwersa). Para sa mass animation, gamitin ang UIFieldBehavior — kinakalkula nito ang mga puwersa nang sentralisado nang walang pares-pares na banggaan, na nagbabawas ng CPU load.

Buod

  • UIKit Dynamics — framework ng pisikal na animasyon sa iOS na may simulation ng gravity, banggaan, at puwersa
  • UIDynamicAnimator — engine na namamahala ng mga behavior at kumakalkula ng pisika sa bawat frame
  • 7 uri ng behavior — UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior, UISnapBehavior, UIPushBehavior, UIDynamicItemBehavior, UIFieldBehavior
  • Pagsasama-sama — gravity + collision + itemBehavior ay lumilikha ng makatotohanang pisika ng pagbagsak na may pagtalbog
  • UIDynamicItem — protocol para sa mga bagay na kalahok sa pisika (ang UIView ay nag-iimplementa bilang default)
  • Limitasyon — hindi hihigit sa 20 bagay na may buong pisika, hindi angkop para sa mga laro at kumplikadong eksena
  • SwiftUI — gumamit ng UIViewRepresentable para sa integrasyon ng UIKit Dynamics

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din