UIKit Dynamics — mahiyyəti, iOS-da fizika qarşılıqlı təsiri

Müəllif: IT Sectr Dərc olunub: 2026-03-01 Oxuma vaxtı: 8 dəq

UIKit Dynamics — iOS-da (UIKit) fiziki animasiya freymvorku olub, View-lərə real fizika qanunlarına əsasən qarşılıqlı təsir göstərməyə imkan verir: qravitasiya, toqquşmalar, elastiklik və cazibə qüvvələri. Məqalə UIDynamicAnimator komponentlərini, behavior növlərini və praktik tətbiq ssenarilərini izah edir.

Əsas

  • UIDynamicAnimator — fiziki animasiya mühərriki, behavior və obyektləri birləşdirir
  • UIGravityBehavior — istiqamət vektoru və təcillə qravitasiya simulyasiyası
  • UICollisionBehavior — View və reference view sərhədləri arasında toqquşmaların işlənməsi
  • UIDynamicItemBehavior — fiziki xüsusiyyətlərin konfiqurasiyası: elastiklik, sıxlıq, sürtünmə
  • UIAttachmentBehavior — iki nöqtə arasında yay və ya kabel effekti ilə əlaqə

UIKit Dynamics nədir?

UIKit Dynamics — Apple tərəfindən iOS 7-də (2013) təqdim edilmiş fiziki modelləşdirmə freymvorkudur. UIView.animate (xətti keçidlər) və Core Animation (təbəqə animasiyası) fərqli olaraq, UIKit Dynamics real fiziki qarşılıqlı təsirləri modelləşdirir: qravitasiya, toqquşmalar, qüvvələr, elastiklik və sürtünmə. Developer UIDynamicAnimator-a behavior-lar əlavə edir və sistem hər kadr üçün fizikanı avtomatik hesablayır.

Freymvork 60/120 FPS tezliyində işləyir və rigid body simulation əsasında qurulmuş daxili fizika mühərrikindən istifadə edir. UIKit Dynamics fizika və ya riyaziyyat bilikləri tələb etmir — hazır behavior tətbiq edib parametrləri konfiqurasiya etmək kifayətdir.

Apple məlumatlarına görə, UIKit Dynamics UI effektləri (kart yığını animasiyası, ikonların titrəməsi, interfeys fizikası) üçün uyğundur, lakin oyunlar üçün nəzərdə tutulmayıb — oyunlar üçün SceneKit və ya SpriteKit istifadə edin.

UIDynamicAnimator — fizika mühərriki

UIDynamicAnimator — UIKit Dynamics-in mərkəzi sinfi. Reference view ilə (adətən kontrollerin view-i) işə salınır və bütün aktiv behavior-ları idarə edir. Hər kadrda UIDynamicAnimator fizika qanunlarına əsasən bütün elementlərin mövqelərini, sürətlərini və təcillərini yenidən hesablayır.

addBehavior metodu bir behavior (və ya mürəkkəb UIDynamicBehavior) əlavə edir, removeBehavior — silir. Animator bütün obyektlər istirahət vəziyyətinə çatdıqda avtomatik dayanır (toqquşma və qüvvə olmadan). Delegate metodu — UIDynamicAnimatorDelegate — simulyasiyanın fasiləsi və davamı barədə xəbərdarlıq edir.

UIDynamicItem — animasiya protokolu

Fizikada iştirak edən hər bir obyekt UIDynamicItem protokolunu tətbiq etməlidir. UIView və UICollectionViewLayoutAttributes artıq onu tətbiq edir. Protokol xüsusiyyətlər tələb edir: bounds, center, transform. Əgər obyekt xüsusidirsə — protokolu əl ilə tətbiq edin.

Dynamic Behaviors növləri

UIKit Dynamics yeddi daxili behavior növünü ehtiva edir, hər biri müəyyən fiziki effekti modelləşdirir. Behavior-lar birləşdirilə bilər: məsələn, qravitasiya + toqquşmalar + elastiklik düşən və sıçrayan obyektlər effekti yaradır.

BehaviorFiziki effektƏsas parametrlər
UIGravityBehaviorQravitasiya (qüvvə vektoru)gravityDirection (dx, dy), magnitude
UICollisionBehaviorObyektlərin və sərhədlərin toqquşmasıcollisionMode, translucence, collisionDelegate
UIAttachmentBehaviorƏlaqə (yay/kabel)anchorPoint, length, damping, frequency
UISnapBehaviorNöqtəyə damping ilə cazibəsnapPoint, damping (0-1)
UIPushBehaviorİtələmə/impuls (davamlı və ya ani)pushDirection, magnitude, mode
UIDynamicItemBehaviorObyektin fiziki xüsusiyyətlərielasticity, friction, density, resistance
UIFieldBehaviorQüvvə sahələri (burulğan, maqnit, radius)position, strength, falloff, region

Behavior-ların birləşdirilməsi

Realistik fizika üçün eyni anda bir neçə behavior lazımdır. Məsələn, düşən kart üçün: UIGravityBehavior (cazibə qüvvəsi), UICollisionBehavior (dib ilə toqquşma), UIDynamicItemBehavior (sıçrama üçün elasticity: 0.4). Bütün behavior-lar bir UIDynamicAnimator-a əlavə olunur.

Swift kod nümunələri

Swift kodu UIKit Dynamics üçün UIDynamicAnimator yaradır və behavior-lar əlavə edir. Aşağıdakı nümunə çoxlu obyektlərlə qravitasiya, toqquşmalar və xüsusi fiziki xüsusiyyətləri nümayiş etdirir.

swift
import UIKit

class PhysicsViewController: UIViewController {

    var animator: UIDynamicAnimator!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. Reference view ilə animator yaradırıq
        animator = UIDynamicAnimator(referenceView: view)

        // 2. Düşən obyektləri yaradırıq
        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. Qravitasiya
        let gravity = UIGravityBehavior(items: [redView, blueView])
        gravity.gravityDirection = CGVector(dx: 0, dy: 1)
        gravity.magnitude = 0.8
        animator.addBehavior(gravity)

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

        // 5. Fiziki xüsusiyyətlər
        let itemBehavior = UIDynamicItemBehavior(items: [redView, blueView])
        itemBehavior.elasticity = 0.6
        itemBehavior.friction = 0.3
        itemBehavior.density = 1.0
        animator.addBehavior(itemBehavior)

        // 6. Toxunma ilə Snap davranışı
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        view.addGestureRecognizer(tap)
    }

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

        // Hər obyekt üçün Snap davranışı
        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("Toqquşma: (point)")
    }
}

Nümunə qravitasiya, toqquşmalar və fiziki xüsusiyyətlərlə iki View yaradır. UISnapBehavior toxunma zamanı obyektləri 0.5 damping ilə toxunma nöqtəsinə çəkir. UICollisionBehaviorDelegate səs və vizual effektlər üçün toqquşmaların başlanğıcını izləyir.

Praktik tətbiq ssenariləri

UIKit Dynamics iOS tətbiqlərində qeyri-oyun interfeys fizikası üçün istifadə olunur. Populyar ssenarilər: kart yığını animasiyası (mərkəzə cəzb etmək üçün UISnapBehavior), xəta zamanı ekranı silkələmək (UIDynamicItemBehavior + UIPushBehavior), onboarding-də "düşən ulduzlar" effekti (gravity + collision + field behavior).

Məhsuldarlıq üçün UIKit Dynamics 15-20 eyni vaxtda fizika obyektindən çox olmaması tövsiyə olunur. Hər obyekt hər kadrda toqquşma və qüvvə hesablamaları tələb edir. Limit aşıldıqda UIView əvəzinə CALayer istifadə edin — Core Animation təbəqələri daha səmərəli idarə edir.

Tez-tez verilən suallar

UIKit Dynamics Core Animation-dan nə ilə fərqlənir?

UIKit Dynamics rigid body simulyasiyası əsasında fiziki qarşılıqlı təsirləri (qravitasiya, toqquşmalar, qüvvələr) modelləşdirir. Core Animation — CALayer xüsusiyyətlərinin (position, opacity, transform) verilmiş zaman əyrisinə əsasən animasiyası. Dynamics interaktiv fizika üçün, Core Animation isə əvvəlcədən təyin edilmiş keçidlər üçün uyğundur.

UIKit Dynamics SwiftUI-də istifadə edilə bilərmi?

UIKit Dynamics-in SwiftUI-də birbaşa dəstəyi yoxdur. Fiziki effektlər üçün UIViewRepresentable daxilində UIKitView + UIDynamicAnimator və ya SwiftUI-də Animation.spring() və withAnimation() vasitəsilə xüsusi animasiyalardan istifadə edin.

UIKit Dynamics-i necə dayandırmaq olar?

animator.removeAllBehaviors() çağırın — bu bütün aktiv fiziki behavior-ları siləcək. Animator bütün obyektlər istirahətə çatdıqda avtomatik dayanır. Müvəqqəti fasilə üçün animator.isPaused xüsusiyyətindən istifadə edin və ya ayrı-ayrı behavior-ları silin.

Eyni anda neçə obyekti animasiya etmək olar?

Apple tam fizika ilə (qravitasiya + toqquşmalar + qüvvələr) 15-20 obyektdən çox olmamağı tövsiyə edir. Kütləvi animasiyalar üçün UIFieldBehavior istifadə edin — o, qüvvələri cüt-cüt toqquşmalar olmadan mərkəzləşdirilmiş şəkildə hesablayır, bu da CPU yükünü azaldır.

Nəticə

  • UIKit Dynamics — qravitasiya, toqquşma və qüvvələrin simulyasiyası ilə iOS fiziki animasiya freymvorku
  • UIDynamicAnimator — behavior-ları idarə edən və hər kadrda fizikanı hesablayan mühərrik
  • 7 behavior növü — UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior, UISnapBehavior, UIPushBehavior, UIDynamicItemBehavior, UIFieldBehavior
  • Birləşdirmə — gravity + collision + itemBehavior sıçrama ilə realistik düşmə fizikası yaradır
  • UIDynamicItem — fizikada iştirak edən obyektlər üçün protokol (UIView standart olaraq tətbiq edir)
  • Məhdudiyyət — tam fizika ilə 20-dən çox obyekt olmamalı, oyunlar və mürəkkəb səhnələr üçün uyğun deyil
  • SwiftUI — UIKit Dynamics inteqrasiyası üçün UIViewRepresentable istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun