UIView.animate: bu nima, iOS-da UIView xususiyatlarining animatsiyasi

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

UIView.animate — iOS-da UIView xususiyatlarini animatsiya qilishning asosiy usuli, UIKit-da duration, delay va options bilan bloklar orqali amalga oshiriladi. Usul frame, alpha, transform, backgroundColor va boshqa animatsiya qilinadigan xususiyatlarni animatsiya qiladi. Maqola sintaksis, parametrlar, amaliy misollar va UIKit animatsiyalarining ichki tuzilishini tavsiflaydi.

Asosiy fikrlar

  • UIView.animate — UIView xususiyatlarini animatsiya qilishning blok usuli: frame, alpha, transform, backgroundColor
  • Parametrlar — duration (soniya), delay (soniya), options (egri, takrorlash, avtomatik qaytarish), completion (yopish)
  • Spring animatsiyasi — UIView.animate(withDuration:delay:usingSpringWithDamping:) fizik qaytarish bilan
  • Keyframe animatsiyasi — UIView.animateKeyframes ko'p bosqichli ketma-ketliklar uchun nisbiy vaqt bilan
  • Core Animation — UIView.animate ichki tuzilishda CALayer darajasida CABasicAnimation dan foydalanadi

UIView.animate nima?

UIView.animate — UIView sinfining statik usuli, iOS 4 (2010) da taqdim etilgan. UIView ning animatsiya qilinadigan xususiyatlari uchun deklarativ API ni ta'minlaydi: frame, bounds, center, alpha, transform, backgroundColor. Usul xususiyat o'zgarishlari bilan blok (yopish) qabul qiladi — tizim har bir o'zgartirilgan xususiyat uchun avtomatik ravishda CABasicAnimation yaratadi.

Blok sintaksisi eski beginAnimations/commitAnimations (iOS 2-3) ni almashtirdi va UIKit da animatsiya standartiga aylandi. UIView.animate animatsiyalari asosiy oqimda bajariladi va UI ni bloklamaydi. Sukut bo'yicha animatsiya davomiyligi easeInOut egri chizig'i bilan 0.25 soniyani tashkil qiladi.

Apple WWDC 2023 ma'lumotlariga ko'ra, yangi loyihalarda tavsiya etilgan animatsiya usuli SwiftUI .animation() va .transition() modifikatorlari bilan, ammo UIKit.animate iOS 16 va undan eski versiyalarni qo'llab-quvvatlash, shuningdek murakkab maxsus o'tishlar uchun asosiy vosita bo'lib qolmoqda.

Animatsiya parametrlari va variantlari

UIView.animate uchta asosiy parametrni taqdim etadi: duration (soniyalarda davomiylik), delay (boshlanishdan oldin kechikish) va options (UIView.AnimationOptions bit maskalari to'plami). Options o'z ichiga oladi: curve (easeInOut, easeIn, easeOut, linear), repeat (takrorlash), autoreverse (avtomatik qaytarish), allowUserInteraction, beginFromCurrentState va overrideInheritedDuration.

ParametrTurTavsif
durationTimeIntervalAnimatsiyaning soniyalardagi davomiyligi (Double turi)
delayTimeIntervalAnimatsiya boshlanishidan oldin kechikish
optionsUIView.AnimationOptionsBit maskasi: curve, repeat, autoreverse, layoutSubviews
animations() -> VoidAnimatsiya qilinadigan xususiyatlarning o'zgarish bloki
completion(Bool) -> VoidAnimatsiya tugagandan keyin yopish

Options parametri massiv orqali birlashtiriladi: [.curveEaseOut, .repeat, .autoreverse]. Repeat va autoreverse bilan animatsiya View ni dastlabki holatiga qaytaradi va cheksiz takrorlanadi. Cheklangan takrorlashlar soni uchun animateKeyframes dan foydalaning.

UIView.animate orqali spring animatsiyasi

Spring animatsiyasi fizik prujina effektini qo'shadi: ob'ekt faqat A nuqtadan B ga o'tmaydi, balki maqsadni so'nuvchi tebranishlar bilan "o'tib ketadi". Parametrlar: usingSpringWithDamping (so'nish 0-1, bu yerda 0 — maksimal tebranish) va initialSpringVelocity (prujinaning boshlang'ich tezligi).

Apple tabiiy UI animatsiyalari uchun usingSpringWithDamping ni 0.4-0.8 oralig'ida tavsiya qiladi. 0.5 qiymati "rezina" hissisiz sezilarli qaytarishni yaratadi. initialSpringVelocity = 1.0 sekundiga 1 pt tezlikka mos keladi. 0 da animatsiya tinch holatdan boshlanadi.

swift
// Spring animatsiyasi va keyframe namunasi
import UIKit

class AnimatedView: UIView {

    func springBounce() {
        // So'nish bilan spring animatsiyasi
        UIView.animate(
            withDuration: 0.8,
            delay: 0,
            usingSpringWithDamping: 0.5,
            initialSpringVelocity: 1.0,
            options: [.allowUserInteraction],
            animations: {
                self.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
                self.alpha = 0.7
            },
            completion: { _ in
                UIView.animate(withDuration: 0.3) {
                    self.transform = .identity
                    self.alpha = 1.0
                }
            }
        )
    }

    func slideIn(from offset: CGFloat) {
        self.transform = CGAffineTransform(translationX: offset, y: 0)
        self.alpha = 0.0

        UIView.animate(
            withDuration: 0.6,
            delay: 0.1,
            options: [.curveEaseOut]
        ) {
            self.transform = .identity
            self.alpha = 1.0
        }
    }
}

Keyframe animatsiyasi

UIView.animateKeyframes animatsiyani bir necha bosqichlarga (keyframes) bo'lish imkonini beradi, har biri o'z nisbiy vaqti va davomiyligi bilan. addKeyframe(withRelativeStartTime:relativeDuration:) usuli umumiy animatsiya davomiyligiga nisbatan 0 dan 1 gacha vaqt qiymatlarini qabul qiladi.

Keyframe animatsiyalari ko'p bosqichli effektlar uchun foydali: tugmaning pulsatsiyasi (kattalashish → pauza → qaytarish), elementlarning ketma-ket paydo bo'lishi, oraliq holatlar bilan murakkab deformatsiyalar. Har bir keyframe options orqali o'z animatsiya egri chizig'iga ega bo'lishi mumkin.

swift
// Murakkab ketma-ketlik bilan keyframe animatsiyasi
func complexPulse() {
    UIView.animateKeyframes(withDuration: 2.0, delay: 0, options: [.repeat]) {
        UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.25) {
            self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            self.alpha = 0.5
        }
        UIView.addKeyframe(withRelativeStartTime: 0.25, relativeDuration: 0.25) {
            self.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
            self.alpha = 0.8
        }
        UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5) {
            self.transform = .identity
            self.alpha = 1.0
        }
    }
}

// Ichma-ich yopishlar bilan animatsiya
func animateCardTransition() {
    UIView.animate(withDuration: 0.4, delay: 0, options: [.curveEaseOut]) {
        self.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
    } completion: { _ in
        UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseIn]) {
            self.transform = .identity
        }
    }
}

Ichki tuzilish: Core Animation sahna ortida

Sahna ortida UIView.animate animatsiyani Core Animation (CAAnimation) orqali har bir UIView ning CALayer iga topshiradi. Animatsiya bloki ichida frame ni o'zgartirganda, tizim mos keladigan qatlamning position va bounds xususiyatlari uchun CABasicAnimation yaratadi. Alpha o'zgartirilsa — qatlamning opacity xususiyati uchun CABasicAnimation.

Core Animation 120 Hz (ProMotion) chastotasida animatsiyalarni qayta ishlaydigan alohida render server (iOS da backboardd) jarayonidan foydalanadi. UIView.animate asosiy oqimni bloklamaydi — xususiyat o'zgarishlari dastur ishtirokisiz kadrlarni interpolyatsiya qiladigan render server ga yuboriladi.

Apple ma'lumotlariga ko'ra, UIView.animate orqali animatsiyalar 60 FPS da har bir o'zgartirilgan qatlam uchun ~2-3% CPU yukiga ega. Ommaviy animatsiyalar uchun (bir vaqtning o'zida 20+ ob'ekt) CATransaction va qatlamlarni qo'lda boshqarish tavsiya etiladi.

UIKit animatsiyalarini tuzatish va vizuallashtirish uchun Xcode Debug View Hierarchy dan foydalaning — har bir qatlamda faol CAAnimations larni, ularning davomiyligini, egri chizig'ini va joriy holatini ko'rsatadi. Core Animation ning ichki tuzilishini tushunish murakkab animatsiyalarda ishlash muammolaridan qochishga va UIView.animate bilan to'g'ridan-to'g'ri CABasicAnimation dan foydalanish o'rtasida optimal yondashuvni tanlashga yordam beradi.

UIKit animatsiyalarini tuzatish va vizuallashtirish uchun Xcode Debug View Hierarchy dan foydalaning — har bir qatlamda faol CAAnimations larni, ularning davomiyligini, egri chizig'ini va joriy holatini ko'rsatadi. Core Animation ning ichki tuzilishini tushunish murakkab animatsiyalarda ishlash muammolaridan qochishga va UIView.animate bilan to'g'ridan-to'g'ri CABasicAnimation dan foydalanish o'rtasida optimal yondashuvni tanlashga yordam beradi.

Ko'p beriladigan savollar

UIView ning qaysi xususiyatlarini animatsiya qilish mumkin?

Animatsiya qilinadigan xususiyatlar UIView: frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor. Shuningdek, Auto Layout cheklovlari o'zgartirilganda layoutIfNeeded() o'zgarishlari ham animatsiya qilinadi. Qolgan xususiyatlar UIView.animate orqali animatsiya qilinmaydi — ular uchun CALayer yoki CADisplayLink dan foydalaning.

UIView.animate UIView.animateKeyframes dan qanday farq qiladi?

UIView.animate joriy holatdan maqsadli holatga bitta animatsiyani bajaradi. UIView.animateKeyframes umumiy davomiylikni turli nisbiy boshlanish va davomiyliklar bilan bir necha bosqichlarga (keyframes) ajratadi. Keyframe ko'p bosqichli ketma-ketliklar uchun mos keladi.

Nima uchun UIView.animate UI ni bloklamaydi?

UIView.animate animatsiyalari render server (backboardd) — alohida iOS jarayonida qayta ishlanadi. Asosiy oqim faqat boshlang'ich va yakuniy xususiyat qiymatlarini yuboradi. Kadr interpolyatsiyasi GPU da Core Animation orqali 120 FPS gacha chastotada amalga oshiriladi.

UIView.animate ni tugashidan oldin qanday to'xtatish mumkin?

UIView da layer.removeAllAnimations() ni chaqiring — bu sahna ortida yaratilgan barcha CAAnimations larni olib tashlaydi. Aniqroq nazorat qilish uchun CATransaction va CAAnimation.keyPath orqali animatsiya identifikatorlaridan foydalaning.

Xulosa

  • UIView.animate — UIView xususiyatlarining duration, delay, options va completion bilan blokli animatsiya usuli
  • Spring animatsiyasi — fizik qaytarish uchun usingSpringWithDamping + initialSpringVelocity
  • Keyframe animatsiyasi — ko'p bosqichli ketma-ketliklar uchun UIView.animateKeyframes addKeyframe bilan
  • Animatsiya qilinadigan xususiyatlar — frame, bounds, center, alpha, transform, backgroundColor
  • Core Animation — UIView.animate ichki tuzilishda CALayer uchun CABasicAnimation yaratadi
  • Render server — animatsiyalar asosiy oqimni bloklamasdan 120 Hz chastotada qayta ishlanadi
  • SwiftUI — yangi loyihalar uchun tavsiya etilgan vosita, UIKit.animate — iOS 16- qo'llab-quvvatlash uchun

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