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 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.
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.
| Parametr | Tur | Tavsif |
|---|---|---|
| duration | TimeInterval | Animatsiyaning soniyalardagi davomiyligi (Double turi) |
| delay | TimeInterval | Animatsiya boshlanishidan oldin kechikish |
| options | UIView.AnimationOptions | Bit maskasi: curve, repeat, autoreverse, layoutSubviews |
| animations | () -> Void | Animatsiya qilinadigan xususiyatlarning o'zgarish bloki |
| completion | (Bool) -> Void | Animatsiya 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.
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.
// 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
}
}
}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.
// 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
}
}
}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
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 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.
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 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
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.