UIKit Dynamics — mohiyati, iOS-da fizika o'zaro ta'siri

Muallif: IT Sectr Nashr etilgan: 2026-03-01 O'qish vaqti: 8 daq

UIKit Dynamics — iOS (UIKit) da fizik animatsiya freymvorki bo'lib, View-larga real fizika qonunlari bo'yicha o'zaro ta'sir qilish imkonini beradi: gravitatsiya, to'qnashishlar, elastiklik va tortish kuchlari. Maqola UIDynamicAnimator komponentlari, behavior turlari va amaliy qo'llash stsenariylarini tushuntiradi.

Asosiy

  • UIDynamicAnimator — fizik animatsiya dvigateli, behavior va obyektlarni bog'laydi
  • UIGravityBehavior — yo'nalish vektori va tezlanish kattaligi bilan gravitatsiya simulyatsiyasi
  • UICollisionBehavior — View va reference view chegaralari o'rtasidagi to'qnashuvlarni qayta ishlash
  • UIDynamicItemBehavior — fizik xususiyatlarni sozlash: elastiklik, zichlik, ishqalanish
  • UIAttachmentBehavior — ikki nuqta o'rtasida prujina yoki kabel effekti bilan bog'lanish

UIKit Dynamics nima?

UIKit Dynamics — Apple tomonidan iOS 7 (2013) da taqdim etilgan fizik modellashtirish freymvorki. UIView.animate (chiziqli o'tishlar) va Core Animation (qatlam animatsiyasi) dan farqli o'laroq, UIKit Dynamics real fizik o'zaro ta'sirlarni modellashtiradi: gravitatsiya, to'qnashishlar, kuchlar, elastiklik va ishqalanish. Dasturchi UIDynamicAnimator ga behavior lar qo'shadi va tizim har bir kadr uchun fizikani avtomatik hisoblaydi.

Freymvork 60/120 FPS chastotada ishlaydi va rigid body simulation ga asoslangan ichki fizika dvigatelidan foydalanadi. UIKit Dynamics fizika yoki matematika bilimini talab qilmaydi — tayyor behavior ni qo'llab parametrlarni sozlash kifoya.

Apple ma'lumotlariga ko'ra, UIKit Dynamics UI effektlari (kartalar to'plami animatsiyasi, ikonkalarning titrashi, interfeys fizikasi) uchun mos, lekin o'yinlar uchun mo'ljallanmagan — o'yinlar uchun SceneKit yoki SpriteKit dan foydalaning.

UIDynamicAnimator — fizika dvigateli

UIDynamicAnimator — UIKit Dynamics ning markaziy klassi. Reference view (odatda kontroller view i) bilan ishga tushiriladi va barcha aktiv behavior larni boshqaradi. Har bir kadrda UIDynamicAnimator fizika qonunlariga muvofiq barcha qo'shilgan elementlarning pozitsiyalari, tezliklari va tezlanishlarini qayta hisoblaydi.

addBehavior metodi bitta behavior (yoki murakkab UIDynamicBehavior) qo'shadi, removeBehavior — olib tashlaydi. Animator barcha obyektlar tinch holatga erishganda avtomatik to'xtaydi (to'qnashuv va kuchlarsiz). Delegate metodi — UIDynamicAnimatorDelegate — simulyatsiyaning pauza va davom etishi haqida xabar beradi.

UIDynamicItem — animatsiya protokoli

Fizikada ishtirok etadigan har bir obyekt UIDynamicItem protokolini amalga oshirishi kerak. UIView va UICollectionViewLayoutAttributes uni allaqachon amalga oshiradi. Protokol xususiyatlarni talab qiladi: bounds, center, transform. Agar obyekt maxsus bo'lsa — protokolni qo'lda amalga oshiring.

Dynamic Behaviors turlari

UIKit Dynamics yettita o'rnatilgan behavior turini o'z ichiga oladi, ularning har biri ma'lum bir fizik effektni modellashtiradi. Behavior lar birlashtirilishi mumkin: masalan, gravitatsiya + to'qnashishlar + elastiklik tushayotgan va sakrab chiqayotgan obyektlar effektini yaratadi.

BehaviorFizik effektAsosiy parametrlar
UIGravityBehaviorGravitatsiya (kuch vektori)gravityDirection (dx, dy), magnitude
UICollisionBehaviorObyektlar va chegaralarning to'qnashishicollisionMode, translucence, collisionDelegate
UIAttachmentBehaviorBog'lanish (prujina/kabel)anchorPoint, length, damping, frequency
UISnapBehaviorNuqtaga damping bilan tortilishsnapPoint, damping (0-1)
UIPushBehaviorItarish/impuls (uzluksiz yoki oniy)pushDirection, magnitude, mode
UIDynamicItemBehaviorObyektning fizik xususiyatlarielasticity, friction, density, resistance
UIFieldBehaviorKuch maydonlari (girdob, magnit, radius)position, strength, falloff, region

Behavior larni birlashtirish

Realistik fizika uchun bir vaqtning o'zida bir nechta behavior kerak. Masalan, tushayotgan karta uchun: UIGravityBehavior (tortish kuchi), UICollisionBehavior (tub bilan to'qnashish), UIDynamicItemBehavior (sakrash uchun elasticity: 0.4). Barcha behavior lar bitta UIDynamicAnimator ga qo'shiladi.

Swift kod misollari

Swift kodi UIKit Dynamics uchun UIDynamicAnimator yaratadi va behavior lar qo'shadi. Quyidagi misol bir nechta obyekt bilan gravitatsiya, to'qnashishlar va maxsus fizik xususiyatlarni ko'rsatadi.

swift
import UIKit

class PhysicsViewController: UIViewController {

    var animator: UIDynamicAnimator!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. Reference view bilan animator yaratamiz
        animator = UIDynamicAnimator(referenceView: view)

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

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

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

        // 6. Teginish bilan Snap xatti-harakati
        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
        view.addGestureRecognizer(tap)
    }

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

        // Har bir obyekt uchun Snap xatti-harakati
        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("To'qnashish: (point)")
    }
}

Misol gravitatsiya, to'qnashishlar va fizik xususiyatlar bilan ikkita View yaratadi. UISnapBehavior teginishda obyektlarni 0.5 damping bilan teginish nuqtasiga tortadi. UICollisionBehaviorDelegate tovush va vizual effektlar uchun to'qnashishlarning boshlanishini kuzatadi.

Amaliy qo'llash stsenariylari

UIKit Dynamics iOS ilovalarida o'yin bo'lmagan interfeys fizikasi uchun qo'llaniladi. Mashhur stsenariylar: kartalar to'plami animatsiyasi (markazga tortish uchun UISnapBehavior), xato paytida ekranni silkitish (UIDynamicItemBehavior + UIPushBehavior), onboardingda "tushayotgan yulduzlar" effekti (gravity + collision + field behavior).

Unumdorlik uchun UIKit Dynamics 15-20 ta bir vaqtda fizik obyektdan ko'p bo'lmasligini tavsiya qiladi. Har bir obyekt har bir kadrda to'qnashish va kuch hisoblarini talab qiladi. Limit oshib ketganda UIView o'rniga CALayer dan foydalaning — Core Animation qatlamlarni samaraliroq qayta ishlaydi.

Tez-tez beriladigan savollar

UIKit Dynamics Core Animation dan nimasi bilan farq qiladi?

UIKit Dynamics rigid body simulyatsiyasiga asoslangan fizik o'zaro ta'sirlarni (gravitatsiya, to'qnashishlar, kuchlar) modellashtiradi. Core Animation — CALayer xususiyatlarining (position, opacity, transform) berilgan vaqt egri chizig'i bo'yicha animatsiyasi. Dynamics interaktiv fizika uchun, Core Animation esa oldindan belgilangan o'tishlar uchun mos.

UIKit Dynamics ni SwiftUI da ishlatish mumkinmi?

UIKit Dynamics ning SwiftUI da to'g'ridan-to'g'ri qo'llab-quvvatlanishi yo'q. Fizik effektlar uchun UIViewRepresentable ichida UIKitView + UIDynamicAnimator yoki SwiftUI da Animation.spring() va withAnimation() orqali maxsus animatsiyalardan foydalaning.

UIKit Dynamics ni qanday to'xtatish kerak?

animator.removeAllBehaviors() ni chaqiring — bu barcha aktiv fizik behavior larni olib tashlaydi. Animator barcha obyektlar tinch holatga erishganda avtomatik to'xtaydi. Vaqtinchalik pauza uchun animator.isPaused xususiyatidan foydalaning yoki alohida behavior larni olib tashlang.

Bir vaqtning o'zida nechta obyektni animatsiya qilish mumkin?

Apple to'liq fizika bilan (gravitatsiya + to'qnashishlar + kuchlar) 15-20 ta obyektdan ko'p bo'lmaslikni tavsiya qiladi. Ommaviy animatsiyalar uchun UIFieldBehavior dan foydalaning — u kuchlarni juft-juft to'qnashuvlarsiz markazlashtirilgan holda hisoblaydi, bu esa CPU yukini kamaytiradi.

Xulosa

  • UIKit Dynamics — gravitatsiya, to'qnashish va kuchlar simulyatsiyasi bilan iOS fizik animatsiya freymvorki
  • UIDynamicAnimator — behavior larni boshqaradigan va har bir kadrda fizikani hisoblaydigan dvigatel
  • 7 turdagi behavior — UIGravityBehavior, UICollisionBehavior, UIAttachmentBehavior, UISnapBehavior, UIPushBehavior, UIDynamicItemBehavior, UIFieldBehavior
  • Birlashtirish — gravity + collision + itemBehavior sakrash bilan realistik tushish fizikasini yaratadi
  • UIDynamicItem — fizikada ishtirok etuvchi obyektlar uchun protokol (UIView standart sifatida amalga oshiradi)
  • Cheklov — to'liq fizika bilan 20 dan ortiq obyekt bo'lmasligi kerak, o'yinlar va murakkab sahnalar uchun mos emas
  • SwiftUI — UIKit Dynamics integratsiyasi uchun UIViewRepresentable dan foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing