iOS-da viewDidAppear — bu nədir, nə zaman çağırılır və nümunələr

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

viewDidAppear — UIViewController metodudur ki, UIKit onu ekran tam olaraq displeydə göründükdən və bütün keçid animasiyaları başa çatdıqdan sonra çağırır. Apple Developer Documentation-ya görə, bu metod View-in istifadəçiyə görünən və qarşılıqlı əlaqəyə hazır olduğuna zəmanət verir. viewDidAppear animasiyaları, trekinqi və asinxron əməliyyatları işə salmaq üçün optimal yerdir.

Əsas məqamlar

  • viewDidAppear ekran tam göründükdən və animasiyalar bitdikdən sonra çağırılır
  • Görünüşdən sonra başlamalı olan animasiyaları işə salmaq üçün istifadə olunur
  • Analitika göndərmək — viewDidAppear-in standart tapşırığı
  • Asinxron əməliyyatlara başlamaq üçün uyğundur: məzmun yükləmə, taymer işə salma
  • super.viewDidAppear valideyn kontrollerlərin düzgün işləməsi üçün məcburidir

viewDidAppear nədir

viewDidAppear — UIViewController metodudur ki, UIKit onu View pəncərə iyerarxiyasına əlavə edildikdən və keçid animasiyası tam başa çatdıqdan sonra çağırır. Bu anda ekran son vəziyyətdədir: görünür, onunla qarşılıqlı əlaqə mümkündür, bütün UIKit animasiyaları dayandırılıb. Tərtibatçı bu metodu ekranın istifadəçinin gözləri qarşısında olmasını tələb edən hərəkətləri yerinə yetirmək üçün ləğv edir.

viewWillAppear-dan fərqli olaraq, burada ekran yalnız göstərilməyə hazırlaşır, viewDidAppear isə istifadəçinin artıq interfeysi gördüyünü bildirir. Bu kritik fərqdir: animasiyanı viewWillAppear-da başlatmaq buraxılmış kadrlara səbəb ola bilər, çünki UIKit hələ də keçidi emal edir. viewDidAppear-da keçid tamamlanıb və kontrollerin resursları yeni məzmunun render edilməsi üçün istifadə edilə bilər.

Metod viewWillAppear-a bənzər şəkildə Bool tipli animated parametrini qəbul edir. Əgər true — ekranın görünməsi animasiya ilə müşayiət olunub. Bu parametr UI davranışını uyğunlaşdırmaq üçün istifadə edilə bilər: məsələn, animasiyasız qayıdış zamanı giriş animasiyasını buraxmaq.

viewDidAppear nə zaman çağırılır

viewDidAppear ekranın görünmə prosesini başa çatdırdığı bütün ssenarilərdə çağırılır. iOS tərtibatçısı baxımından əsas halları nəzərdən keçirək.

Naviqasiya keçidi başa çatdıqda

UINavigationController push və ya pop animasiyasını başa çatdırdıqdan sonra hədəf kontrollerdə viewDidAppear çağırılır. Stakdakı ilk ekran üçün ilkin açılış animasiyasından sonra işə düşür. Bu əsas ssenaridir və məntiqi viewDidAppear-da yerləşdirərkən ona istinad edilir.

Modal pəncərə dismiss edildikdən sonra

İstifadəçi modal təqdim edilmiş kontrolleri bağlayıb əvvəlki ekrana qayıtdıqda, UIKit qayıdan kontrollerdə viewDidAppear-ı çağırır. animated parametri dismiss-ın animasiya ilə yerinə yetirilib-yetirilmədiyinə uyğun olacaq. Bu an uşaq ekrandan məlumat aldıqdan sonra UI-ni yeniləmək üçün vacibdir.

swift
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    logScreenView()
    startOnboardingAnimation()
}

TabBar əlavələrini dəyişdirərkən

UITabBarController seçilmiş əlavənin kontrollerində keçid başa çatdıqdan sonra viewDidAppear-ı çağırır. Bu, keçidin başlanğıcında işə düşən viewWillAppear-dan fərqlidir. Əgər əlavədə qarşılama animasiyası varsa və ya aktiv vaxtı izləmək lazımdırsa, viewDidAppear düzgün yerdir.

Fondan görünəndə

Tətbiq background-dan foreground-a qayıtdıqda, görünən kontrollerdə viewWillAppear və viewDidAppear çağırıla bilər, əgər View-in həyat dövrü müvəqqəti dayandırılıbsa. Lakin fondan qayıdışı etibarlı izləmək üçün ayrıca UIApplication.willEnterForegroundNotification istifadə edin.

viewDidAppear-da praktiki tapşırıqlar

viewDidAppear düzgün yerinə yetirilmək üçün görünən ekran tələb edən tapşırıqları həll edir. Real layihələrdə əsas istifadə ssenarilərini nəzərdən keçirək.

Analitika hadisələrinin göndərilməsi

viewDidAppear-ın ən geniş yayılmış tapşırığı — ekranın görünməsinin trekinqidir. Firebase Analytics, Amplitude və ya Mixpanel kimi analitik sistemlər hadisələri yalnız ekran həqiqətən istifadəçiyə göstərildikdən sonra almalıdır. viewWillAppear-da hadisə göndərmək baxış vaxtını aşağı sala və yanlış tetiklemeler yarada bilər.

swift
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    Analytics.logEvent(
        name: "screen_view",
        parameters: [
            "screen_name": "ProfileScreen",
            "screen_class": String(describing: self)
        ]
    )
}

Giriş animasiyalarının işə salınması

Ekran göründükdən sonra başlamalı olan animasiyalar — gecikmə ilə elementlərin görünməsi, paralaks, təlimat — viewDidAppear-da işə salınır. Bu anda qrafik kontekst tam hazırdır və animasiya başlanğıcda kadr buraxmadan hamar olacaq. Bu, xüsusilə UIViewPropertyAnimator istifadə edən animasiyalar üçün vacibdir.

Asinxron yükləmələrə başlamaq

Ağır asinxron əməliyyatlar — yüksək rezolyusiyalı şəkillərin yüklənməsi, böyük JSON-ların pars edilməsi, video başlatma — viewDidLoad və ya viewWillAppear-da deyil, viewDidAppear-da işə salınmaq daha yaxşıdır. Metod çağırıldığı anda istifadəçi artıq interfeysi görür, buna görə də ekranın görünməsini gecikdirmədən skeleton və ya loader göstərmək olar.

Taymerlərin və intervalların işə salınması

Ekranda dövri yenilənmə tələb edən elementlər varsa — geri sayım taymeri, yükləmə indikatoru, irəliləyiş animasiyası — onlar viewDidAppear-da işə salınır və viewDidDisappear-da dayandırılır. Bu, ekran görünməyəndə taymerlərin işləməsinin qarşısını alır, batareya enerjisinə və CPU resurslarına qənaət edir.

Məzmunun oxudulmasına başlamaq

Media məzmunu — video, audio, Lottie animasiyaları — məhz viewDidAppear-da işə salınır, daha əvvəl deyil. viewWillAppear-da oxutmağa başlasanız, istifadəçi ekran hələ görünərkən ilk saniyələri qaçıracaq. viewDidAppear-da siz AVPlayer və ya Lottie animasiyasını istifadəçinin məzmunu ilk kadrdan gördüyünə əmin olaraq işə sala bilərsiniz. Bu, xüsusilə onboarding ekranları və splash screen-lər üçün vacibdir, burada dəqiq timing önəmlidir.

Animasiyalar və performans

Düzgün an animasiyaya başlamaq interfeysin hamarlıq qavrayışına birbaşa təsir edir. viewWillAppear və viewDidAppear-da başlama arasındakı fərq sadə animasiyalarda nəzərə çarpmaya bilər, lakin mürəkkəb səhnələr üçün kritikdir.

UIKit ekranlar arasında push-keçidi yerinə yetirərkən ekran görüntüləri yaradır, onları animasiya edir və eyni zamanda yeni kontrollerdə viewWillAppear-ı çağırır. Bu anda ağır animasiya — paralaks, blur, transformasiya — işə salınarsa, UIKit keçid animasiyasının kadrlarını buraxa bilər, sıçrayış effekti yaradır. viewDidAppear keçid animasiyasının başa çatdığına zəmanət verir və siz renderinq üzərində tam nəzarət əldə edirsiniz.

swift
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    UIView.animate(
        withDuration: 0.6,
        delay: 0.3,
        usingSpringWithDamping: 0.8,
        initialSpringVelocity: 0.5
    ) {
        self.cardView.alpha = 1.0
        self.cardView.transform = .identity
    }
}

Elementlərin təbii kaskadlı görünməsini yaratmaq üçün gecikmələr və damping istifadə edin. Bu yanaşma interfeysin qavranılmasını yaxşılaşdırır və dwell time-i artırır — istifadəçi məzmunu daha uzun öyrənir, bu da davranış metrikalarına müsbət təsir göstərir.

viewDidAppear-da tipik səhvlər

Yanlış istifadə viewDidAppear performans problemlərinə, animasiyaların gözlənilməz davranışına və həddindən artıq trekinqə səbəb ola bilər. Ümumi səhvləri nəzərdən keçirək.

Birinci səhv — çoxsaylı çağırışlar. viewDidAppear müəyyən ssenarilərdə bir neçə dəfə çağırıla bilər: əlavələrin dəyişdirilməsi, fondan qayıdış, modal keçidlər. Əgər metoddakı ağır əməliyyat bayraq yoxlanılmadan yerinə yetirilirsə, o təkrarlanacaq. Birdəfəlik hərəkətlər üçün hasAppeared bayrağı və ya dispatchOnce istifadə edin.

İkinci səhv — gizlənmə zamanı ləğv edilməyən şəbəkə sorğularının başladılması. İstifadəçi sorğu bitməmiş ekranı tərk edərsə, nəticə artıq gizlədilmiş View-ə tətbiq oluna bilər. Ləğv edilə bilən URLSessionTask istifadə edin və onları viewDidDisappear-da bitirin.

Üçüncü səhv — viewWillAppear-da viewDidAppear əvəzinə trekinq. Bəzi tərtibatçılar analytics hadisələrini viewWillAppear-da göndərir, lakin bu, ekran görünməyibsə (məsələn, ləğv edilmiş pop jesti zamanı) yanlış tetiklemeler yaradır. viewDidAppear istifadəçinin həqiqətən ekranı gördüyünün yeganə etibarlı göstəricisidir.

Dördüncü səhv — super çağırışını unutmaq. super.viewDidAppear çağırışı UINavigationController, UITabBarController və UISplitViewController-in düzgün işləməsi üçün vacibdir. O olmadan standart naviqasiya və interfeys yeniləmə mexanizmləri sına bilər.

Beşinci səhv — viewDidLayoutSubviews-i nəzərə almadan oriyentasiya və ya ekran ölçüsünün dəyişdirilməsi. viewDidAppear-da animasiyanız View-in son ölçülərindən asılıdırsa, unutmayın ki, viewDidLayoutSubviews viewDidAppear-dan əvvəl bir neçə dəfə çağırıla bilər. Ekranın ilk görünməsi zamanı layout viewDidAppear çağırılmazdan əvvəl başa çatır, lakin sonrakı ölçü dəyişikliklərində — məsələn, cihazın fırlanması zamanı — viewDidAppear çağırılmaya bilər və animasiyanız işə düşməyəcək. Belə hallarda firstLayout bayrağı ilə viewDidLayoutSubviews istifadə edin.

Düzgün tətbiq animasiya obyektinə istinadın saxlanmasını və ekran tərk edilərkən onun aşkar ləğv edilməsini nəzərdə tutur. Altıncı səhv — dayandırma bayrağı olmadan sonsuz animasiyaların başladılması. viewDidAppear-da təkrarlanan animasiya (məsələn, pulsasiya edən indikator və ya fırlanan loader) başladırsınızsa, lakin onu viewDidDisappear-da dayandırmırsınızsa, animasiya GPU resurslarını ekran gizli olsa belə sərf edəcək. Həmişə aktiv animasiyaya istinad saxlayın və həyat dövrünü bitirən müvafiq metodda removeAllAnimations və ya setCompletion çağırın.

Yeddinci səhv — aktivlikləri dayandırmaq üçün viewDidDisappear-a məhəl qoymamaq. viewDidAppear-da GPS, akselerometr və ya giroskop dinləməyə başlamısınızsa, mütləq onu viewDidDisappear-da dayandırın. Əks halda sensorlar fonda işləməyə davam edəcək, batareyanı boşaldacaq, hətta istifadəçi çoxdan başqa ekrana keçsə belə. Həyat dövrünün müvafiq metodlarında qoşalaşmış start və stop çağırışlarından istifadə edin — bu, cihaz resurslarının düzgün idarə olunmasına zəmanət verir.

Tez-tez verilən suallar

viewDidAppear və viewWillAppear arasında nə fərq var?

viewWillAppear görünmə animasiyasından əvvəl, ekran hələ görünməyəndə çağırılır. viewDidAppear — animasiya tam başa çatdıqdan sonra, ekran görünən və qarşılıqlı əlaqə üçün əlçatan olduqda.

Niyə animasiyaları viewDidAppear-da başlatmaq daha yaxşıdır?

viewDidAppear-da keçid animasiyası UIKit artıq başa çatıb və bütün renderinq resursları kontrolleriniz üçün əlçatandır. Animasiyanı daha əvvəl başlatmaq buraxılmış kadrlara və sıçrayışlı interfeysə səbəb ola bilər.

viewDidAppear viewWillAppear olmadan çağırıla bilərmi?

Normal həyat dövründə yox — viewDidAppear həmişə viewWillAppear-dan sonra gəlir. Lakin bəzi vəziyyət bərpa ssenarilərində sistem yalnız viewDidAppear-ı çağıra bilər.

viewDidAppear-da analitikanın təkrarlanmasından necə qaçınmaq olar?

Bayraq firstAppearance yoxlaması əlavə edin və ya sayğac və ekran adı kombinasiyasından istifadə edin. Məsələn, screen_view hadisəsini yalnız firstAppearance = true olduqda göndərin, sonra bayrağı sıfırlayın.

Fondan viewDidAppear çağırıldıqda nə baş verir?

Background-dan qayıdarkən UIKit görünən kontrollerdə viewDidAppear-ı çağıra bilər, əgər View yaddaşdan boşaldılıbsa. Etibarlı izləmə üçün AppDelegate bildirişlərindən istifadə edin.

Xülasə

  • viewDidAppear ekran tam göründükdən və bütün keçid animasiyaları başa çatdıqdan sonra çağırılır
  • Ekran görünmələrinin analitikasını və istifadəçi hadisələrini göndərmək üçün optimal yer
  • Animasiyaları hamarlıq üçün viewDidAppear-da başladın, buraxılmış kadrlardan qaçınmaq üçün
  • Ağır asinxron əməliyyatları görünmədən sonra başladın ki, renderinqi gecikdirməsin
  • Taymerlər və intervallar viewDidAppear-da başladılır və viewDidDisappear-da dayandırılır
  • Birdəfəlik hərəkətlərin təkrarlanmasının qarşısını almaq üçün bayraqlar və ya sayğaclar istifadə edin
  • Naviqasiya və valideyn kontrollerlərin düzgün işləməsi üçün həmişə super.viewDidAppear çağırın

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