UIView.animate — iOS-da UIView xassələrinin animasiyası üçün əsas metod, UIKit-də duration, delay və options ilə bloklar vasitəsilə həyata keçirilir. Metod frame, alpha, transform, backgroundColor və digər animasiya olunan xassələri animasiya edir. Məqalə sintaksisi, parametrləri, praktik nümunələri və UIKit animasiyalarının daxili quruluşunu təsvir edir.
Əsas məqamlar
UIView.animate — UIView sinfinin statik metodu, iOS 4-də (2010) təqdim edilmişdir. UIView-in animasiya olunan xassələri üçün deklarativ API təmin edir: frame, bounds, center, alpha, transform, backgroundColor. Metod xassə dəyişiklikləri ilə blok (bağlanma) qəbul edir — sistem hər dəyişdirilmiş xassə üçün avtomatik olaraq CABasicAnimation yaradır.
Blok sintaksisi köhnə beginAnimations/commitAnimations (iOS 2-3) metodunu əvəz etdi və UIKit-də animasiya standartı oldu. UIView.animate animasiyaları əsas thread-də yerinə yetirilir və UI-ni bloklamır. Susmaya görə animasiya müddəti easeInOut əyrisi ilə 0.25 saniyədir.
Apple WWDC 2023 məlumatına görə, yeni layihələrdə tövsiyə olunan animasiya üsulu SwiftUI-dir .animation() və .transition() modifierləri ilə, lakin UIKit.animate iOS 16 və daha köhnə versiyalarını dəstəkləmək, həmçinin mürəkkəb fərdi keçidlər üçün əsas alət olaraq qalır.
UIView.animate üç əsas parametr təqdim edir: duration (saniyələrlə müddət), delay (başlamazdan əvvəl gecikmə) və options (UIView.AnimationOptions bit maskaları dəsti). Options daxildir: curve (easeInOut, easeIn, easeOut, linear), repeat (təkrarlama), autoreverse (avtomatik dönüş), allowUserInteraction, beginFromCurrentState və overrideInheritedDuration.
| Parametr | Tip | Təsvir |
|---|---|---|
| duration | TimeInterval | Animasiyanın saniyələrlə müddəti (Double tipi) |
| delay | TimeInterval | Animasiya başlamazdan əvvəl gecikmə |
| options | UIView.AnimationOptions | Bit maskası: curve, repeat, autoreverse, layoutSubviews |
| animations | () -> Void | Animasiya olunan xassələrin dəyişmə bloku |
| completion | (Bool) -> Void | Animasiya bitdikdən sonra bağlanma |
Options parametri massiv vasitəsilə birləşdirilir: [.curveEaseOut, .repeat, .autoreverse]. Repeat və autoreverse ilə animasiya View-i ilkin vəziyyətinə qaytarır və sonsuz təkrarlanır. Sonlu sayda təkrarlama üçün animateKeyframes istifadə edin.
Spring animasiyası fiziki yay effekti əlavə edir: obyekt sadəcə A nöqtəsindən B-yə keçmir, hədəfi sönən rəqslərlə «keçir». Parametrlər: usingSpringWithDamping (sönümləmə 0-1, burada 0 maksimum rəqsdir) və initialSpringVelocity (yayın ilkin sürəti).
Apple təbii UI animasiyaları üçün usingSpringWithDamping-i 0.4-0.8 diapazonunda tövsiyə edir. 0.5 dəyəri «rezin» hissi olmadan nəzərə çarpan geri çevrilmə yaradır. initialSpringVelocity = 1.0 saniyədə 1 pt sürətə uyğundur. 0-da animasiya sakit vəziyyətdən başlayır.
// Spring animasiyası və keyframe nümunəsi
import UIKit
class AnimatedView: UIView {
func springBounce() {
// Sönümləmə ilə spring animasiyası
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 animasiyanı bir neçə mərhələyə (keyframes) bölməyə imkan verir, hər biri öz nisbi vaxtı və müddəti ilə. addKeyframe(withRelativeStartTime:relativeDuration:) metodu ümumi animasiya müddətinə nisbətən 0-dan 1-ə qədər vaxt dəyərləri qəbul edir.
Keyframe animasiyaları çoxmərhələli effektlər üçün faydalıdır: düymənin pulsasiyası (böyümə → pauza → qayıtma), elementlərin ardıcıl görünməsi, aralıq vəziyyətlərlə mürəkkəb deformasiyalar. Hər keyframe options vasitəsilə öz animasiya əyrisinə malik ola bilər.
// Mürəkkəb ardıcıllıqla keyframe animasiyası
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
}
}
}
// İç-içə bağlanmalarla animasiya
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
}
}
}Pərdə arxasında UIView.animate animasiyanı Core Animation (CAAnimation) vasitəsilə hər UIView-in CALayer-inə ötürür. Animasiya bloku daxilində frame-i dəyişdirdikdə, sistem müvafiq təbəqənin position və bounds xassələri üçün CABasicAnimation yaradır. Alpha dəyişdirilərsə — təbəqənin opacity xassəsi üçün CABasicAnimation.
Core Animation 120 Hz (ProMotion) tezliyində animasiyaları emal edən ayrıca render server prosesindən (iOS-da backboardd) istifadə edir. UIView.animate əsas thread-i bloklamır — xassə dəyişiklikləri proqramın iştirakı olmadan kadrları interpolyasiya edən render server-ə göndərilir.
Apple məlumatına görə, UIView.animate vasitəsilə animasiyalar 60 FPS-də hər dəyişdirilmiş təbəqə üçün ~2-3% CPU yükünə malikdir. Kütləvi animasiyalar üçün (eyni anda 20+ obyekt) CATransaction və təbəqələrin əl ilə idarə edilməsi tövsiyə olunur.
UIKit animasiyalarının debug və vizuallaşdırılması üçün Xcode Debug View Hierarchy-dən istifadə edin — hər təbəqədə aktiv CAAnimations-ları, onların müddətini, əyrisini və cari vəziyyətini göstərir. Core Animation-un daxili quruluşunu başa düşmək mürəkkəb animasiyalarda performans problemlərindən qaçmağa və UIView.animate ilə birbaşa CABasicAnimation istifadəsi arasında optimal yanaşma seçməyə kömək edir.
UIKit animasiyalarının debug və vizuallaşdırılması üçün Xcode Debug View Hierarchy-dən istifadə edin — hər təbəqədə aktiv CAAnimations-ları, onların müddətini, əyrisini və cari vəziyyətini göstərir. Core Animation-un daxili quruluşunu başa düşmək mürəkkəb animasiyalarda performans problemlərindən qaçmağa və UIView.animate ilə birbaşa CABasicAnimation istifadəsi arasında optimal yanaşma seçməyə kömək edir.
Tez-tez verilən suallar
Animasiya olunan xassələr UIView: frame, bounds, center, alpha, transform (CGAffineTransform), backgroundColor. Auto Layout constraint-ləri dəyişdirilərkən layoutIfNeeded() dəyişiklikləri də animasiya olunur. Qalan xassələr UIView.animate vasitəsilə animasiya olunmur — onlar üçün CALayer və ya CADisplayLink istifadə edin.
UIView.animate cari vəziyyətdən hədəf vəziyyətə bir animasiya yerinə yetirir. UIView.animateKeyframes ümumi müddəti müxtəlif nisbi başlanğıc və müddətlərlə bir neçə mərhələyə (keyframes) bölür. Keyframe çoxmərhələli ardıcıllıqlar üçün uyğundur.
UIView.animate animasiyaları render server-də (backboardd) — iOS-un ayrıca prosesində emal olunur. Əsas thread yalnız ilkin və son xassə dəyərlərini göndərir. Kadr interpolyasiyası GPU-da Core Animation vasitəsilə 120 FPS-ə qədər tezlikdə yerinə yetirilir.
UIView-də layer.removeAllAnimations() çağırın — bu, pərdə arxasında yaradılmış bütün CAAnimations-ları siləcək. Daha dəqiq nəzarət üçün CATransaction və CAAnimation.keyPath vasitəsilə animasiya identifikatorlarından istifadə edin.
Xülasə
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.
Həm də oxuyun