iOS’te viewDidAppear — nedir, ne zaman çağrılır ve örnekler

Yazar: IT Sectr Yayınlanma: 2026-03-05 Okuma süresi: 8 dk

viewDidAppear, UIKit’in ekran görüntüde tamamen göründükten ve tüm geçiş animasyonları tamamlandıktan sonra çağırdığı bir UIViewController yöntemidir. Apple Developer Documentation’a göre, bu yöntem View’in kullanıcı için görünür ve etkileşime hazır olduğunu garanti eder. viewDidAppear, animasyonları, izlemeyi ve asenkron işlemleri başlatmak için en uygun yerdir.

Önemli Noktalar

  • viewDidAppear ekran tamamen göründükten ve animasyonlar tamamlandıktan sonra çağrılır
  • Göründükten sonra başlaması gereken animasyonları başlatmak için kullanılır
  • Ekran görüntüleme analitiği göndermek viewDidAppear’ın standart bir görevidir
  • Asenkron işlemleri başlatmak için uygundur: içerik yükleme, zamanlayıcıları başlatma
  • Üst denetleyicilerin doğru çalışması için super.viewDidAppear gereklidir

viewDidAppear nedir

viewDidAppear, View pencere hiyerarşisine eklendikten ve geçiş animasyonu tamamen tamamlandıktan sonra UIKit’in çağırdığı bir UIViewController yöntemidir. Bu noktada ekran son durumundadır: görünür, etkileşime açık ve tüm UIKit animasyonları durmuştur. Geliştirici, ekranın kullanıcının gözünün önünde olduğunun garanti edilmesini gerektiren eylemleri gerçekleştirmek için bu yöntemi geçersiz kılar.

viewWillAppear’ın aksine, ekranın yalnızca gösterilmeye hazırlandığı yerde, viewDidAppear kullanıcının arayüzü zaten gördüğünü belirtir. Bu kritik bir farktır: viewWillAppear’da bir animasyon başlatmak, UIKit hâlâ geçişi işlediğinden kare düşmesine neden olabilir. viewDidAppear’da geçiş tamamlanmıştır ve denetleyicinin kaynakları yeni içerik oluşturmak için kullanılabilir.

Yöntem, viewWillAppear’a benzer şekilde Bool türünde bir animated parametresi kabul eder. true ise, ekranın görünmesine animasyon eşlik etmiştir. Bu parametre, arayüz davranışını uyarlamak için kullanılabilir: örneğin, animasyonsuz bir dönüşte giriş animasyonunu atlamak.

viewDidAppear ne zaman çağrılır

viewDidAppear, ekranın görünme sürecini tamamladığı tüm senaryolarda çağrılır. Bir iOS geliştiricisinin bakış açısından ana durumları inceleyelim.

Bir navigasyon geçişi tamamlandığında

UINavigationController bir push veya pop animasyonunu bitirdikten sonra, hedef denetleyicide viewDidAppear çağrılır. Yığındaki ilk ekran için, ilk açılış animasyonundan sonra çalışır. Bu ana senaryodur ve geliştiricilerin viewDidAppear’a mantık yerleştirirken öncelikli olarak hedefledikleri şeydir.

Bir modal kapatıldıktan sonra

Kullanıcı modal olarak sunulan bir denetleyiciyi kapatıp öncekine döndüğünde, UIKit dönen denetleyicide viewDidAppear’ı çağırır. animated parametresi, dismiss işleminin animasyonla yapılıp yapılmadığına karşılık gelir. Bu an, alt ekrandan veri aldıktan sonra arayüzü güncellemek için önemlidir.

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

TabBar sekmeleri değiştirilirken

UITabBarController, değiştirme animasyonu tamamlandıktan sonra seçili sekmenin denetleyicisinde viewDidAppear’ı çağırır. Bu, değişimin başlangıcında tetiklenen viewWillAppear’dan farklıdır. Bir sekmede karşılama animasyonu varsa veya aktif süreyi izlemeniz gerekiyorsa, viewDidAppear doğru yerdir.

Arka plandan dönüldüğünde

Uygulama arka plandan ön plana döndüğünde, View’in yaşam döngüsü geçici olarak askıya alınmışsa, görünür denetleyicide viewWillAppear ve viewDidAppear çağrılabilir. Bununla birlikte, arka plandan dönüşü güvenilir bir şekilde izlemek için ayrı olarak UIApplication.willEnterForegroundNotification kullanın.

viewDidAppear’da pratik görevler

viewDidAppear, doğru yürütme için görünür bir ekran gerektiren görevleri halleder. Gerçek projelerdeki ana kullanım senaryolarına bakalım.

Analitik olayları gönderme

viewDidAppear’ın en yaygın görevi ekran görüntülemelerini izlemektir. Firebase Analytics, Amplitude veya Mixpanel gibi analitik sistemleri, olayları yalnızca ekran kullanıcıya gerçekten gösterildikten sonra almalıdır. viewWillAppear’da bir olay göndermek, görüntüleme süresini düşük gösterebilir ve yanlış tetiklemeler oluşturabilir.

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

Giriş animasyonlarını başlatma

Ekran göründükten sonra başlaması gereken animasyonlar — öğelerin kademeli görünmesi, paralaks, eğitimler — viewDidAppear’da başlatılır. Bu noktada grafik bağlamı tamamen hazırdır ve animasyon başlangıçta kare düşmesi olmadan akıcı olacaktır. Bu, özellikle UIViewPropertyAnimator kullanan animasyonlar için önemlidir.

Asenkron yüklemeleri başlatma

Ağır asenkron işlemler — yüksek çözünürlüklü görüntüleri yükleme, büyük JSON’ları ayrıştırma, videoyu başlatma — viewDidLoad veya viewWillAppear yerine viewDidAppear’da başlatmak daha iyidir. Yöntem çağrıldığında, kullanıcı zaten arayüzü görmektedir, bu nedenle ekran görünümünü geciktirmeden bir iskelet veya yükleyici gösterebilirsiniz.

Zamanlayıcıları ve aralıkları başlatma

Ekranda periyodik güncellemeler gerektiren öğeler varsa — geri sayım zamanlayıcısı, ilerleme göstergesi, ilerleme animasyonu — bunlar viewDidAppear’da başlatılır ve viewDidDisappear’da durdurulur. Bu, ekran görünür olmadığında zamanlayıcıların çalışmasını önleyerek pil ömründen ve CPU kaynaklarından tasarruf sağlar.

İçerik oynatmayı başlatma

Medya içeriği — video, ses, Lottie animasyonları — daha önce değil, viewDidAppear’da başlatılır. Oynatmayı viewWillAppear’da başlatırsanız, kullanıcı ekran hâlâ görünürken ilk birkaç saniyeyi kaçıracaktır. viewDidAppear’da, kullanıcının içeriği ilk kareden itibaren gördüğüne güvenerek bir AVPlayer veya Lottie animasyonu başlatabilirsiniz. Bu, hassas zamanlamanın önemli olduğu tanıtım ekranları ve açılış ekranları için özellikle önemlidir.

Animasyonlar ve performans

Bir animasyonu başlatmak için doğru zaman, arayüzün akıcılık algısını doğrudan etkiler. viewWillAppear ve viewDidAppear’da başlatma arasındaki fark, basit animasyonlar için fark edilmeyebilir, ancak karmaşık sahneler için kritik hale gelir.

UIKit ekranlar arasında bir push geçişi gerçekleştirdiğinde, ekran görüntüleri alır, bunları canlandırır ve aynı anda yeni denetleyicide viewWillAppear’ı çağırır. Bu noktada ağır bir animasyon başlatırsanız — paralaks, bulanıklık, dönüşüm — UIKit geçiş animasyonunun karelerini düşürebilir ve sarsıntılı bir etki yaratabilir. viewDidAppear, geçiş animasyonunun tamamlandığını garanti ederek size oluşturma üzerinde tam kontrol sağlar.

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
    }
}

Öğelerin doğal bir kademeli görünümünü oluşturmak için gecikmeler ve sönümleme kullanın. Bu yaklaşım, arayüz algısını iyileştirir ve kalma süresini artırır — kullanıcılar içeriği keşfetmek için daha fazla zaman harcar ve bu da davranışsal metrikleri olumlu etkiler.

viewDidAppear’da yaygın hatalar

Yanlış kullanım viewDidAppear, performans sorunlarına, beklenmeyen animasyon davranışına ve aşırı izlemeye yol açabilir. Yaygın hatalara bakalım.

İlk hata birden çok çağrıdır. viewDidAppear, belirli senaryolarda birkaç kez çağrılabilir: sekme değiştirme, arka plandan dönüş, modal geçişler. Yöntem bir bayrak kontrolü olmadan ağır bir işlem gerçekleştirirse, yinelenir. Tek seferlik eylemler için bir hasAppeared bayrağı veya dispatchOnce kullanın.

İkinci hata, gizleme sırasında iptal edilmeden ağ istekleri başlatmaktır. Kullanıcı istek tamamlanmadan önce ekrandan ayrılırsa, sonuç zaten gizli bir View’e uygulanabilir. İptal edilebilir URLSessionTask kullanın ve bunları viewDidDisappear’da iptal edin.

Üçüncü hata, viewDidAppear yerine viewWillAppear’da izleme yapmaktır. Bazı geliştiriciler viewWillAppear’da analitik olayları gönderir, ancak bu, ekran görünmezse (örneğin, iptal edilen bir pop hareketi nedeniyle) yanlış tetiklemeler oluşturur. viewDidAppear, kullanıcının ekranı gerçekten gördüğünün tek güvenilir göstergesidir.

Dördüncü hata, super’i unutmaktır. super.viewDidAppear çağrısı, UINavigationController, UITabBarController ve UISplitViewController’ın doğru çalışması için gereklidir. Bu olmadan, standart navigasyon ve arayüz güncelleme mekanizmaları bozulabilir.

Beşinci hata, viewDidLayoutSubviews’ı dikkate almadan yönlendirmeyi veya ekran boyutunu değiştirmektir. viewDidAppear’daki animasyonunuz View’in son boyutlarına bağlıysa, viewDidLayoutSubviews’ın viewDidAppear’dan önce birkaç kez çağrılmış olabileceğini unutmayın. İlk ekran görünümünde, viewDidAppear çağrılmadan önce düzen tamamlanır, ancak sonraki boyut değişikliklerinde — örneğin, cihaz döndürüldüğünde — viewDidAppear çağrılmayabilir ve animasyonunuz başlamaz. Bu gibi durumlarda, firstLayout bayrak kontrolü ile viewDidLayoutSubviews kullanın.

Doğru uygulama, animasyon nesnesine bir referans tutmayı ve ekrandan ayrılırken onu açıkça iptal etmeyi içerir. Altıncı hata, durdurma bayrağı olmadan sonsuz animasyonlar başlatmaktır. viewDidAppear’da yinelenen bir animasyon başlatır (örneğin, titreşen bir gösterge veya dönen bir yükleyici) ancak viewDidDisappear’da durdurmazsanız, animasyon ekran gizliyken bile GPU kaynaklarını tüketir. Her zaman etkin animasyona bir referans tutun ve ilgili yaşam döngüsü yönteminde removeAllAnimations veya setCompletion’ı çağırın.

Yedinci hata, etkinlikleri durdurmak için viewDidDisappear’ı görmezden gelmektir. viewDidAppear’da GPS, ivmeölçer veya jiroskop dinlemeye başladıysanız, bunu viewDidDisappear’da durdurduğunuzdan emin olun. Aksi takdirde, kullanıcı çoktan başka bir ekrana geçmiş olsa bile sensörler arka planda çalışmaya devam ederek pili tüketir. İlgili yaşam döngüsü yöntemlerinde eşleştirilmiş başlatma ve durdurma çağrıları kullanın — bu, cihaz kaynaklarının doğru yönetimini garanti eder.

Sıkça Sorulan Sorular

viewDidAppear ve viewWillAppear arasındaki fark nedir?

viewWillAppear, ekran henüz görünmezken görünme animasyonundan önce çağrılır. viewDidAppear, animasyon tamamen tamamlandıktan sonra, ekran görünür ve etkileşim için kullanılabilir olduğunda çağrılır.

Animasyonları viewDidAppear’da başlatmak neden daha iyidir?

viewDidAppear’da, UIKit’in geçiş animasyonu zaten tamamlanmıştır ve tüm oluşturma kaynakları denetleyiciniz için kullanılabilir. Animasyonları daha erken başlatmak, kare düşmesine ve sarsıntılı bir arayüze neden olabilir.

viewDidAppear, viewWillAppear olmadan çağrılabilir mi?

Normal bir yaşam döngüsünde, hayır — viewDidAppear her zaman viewWillAppear’ı takip eder. Ancak, belirli durum geri yükleme senaryolarında sistem yalnızca viewDidAppear’ı çağırabilir.

viewDidAppear’da analitik yinelemesi nasıl önlenir?

firstAppearance için bir bayrak kontrolü ekleyin veya bir sayaç ve ekran adı kombinasyonu kullanın. Örneğin, screen_view olayını yalnızca firstAppearance = true olduğunda gönderin, ardından bayrağı sıfırlayın.

viewDidAppear arka plandan çağrıldığında ne olur?

Arka plandan dönüşte, View bellekten boşaltılmışsa UIKit, görünür denetleyicide viewDidAppear’ı çağırabilir. Güvenilir izleme için AppDelegate bildirimlerini kullanın.

Özet

  • viewDidAppear ekran tamamen göründükten ve tüm geçiş animasyonları tamamlandıktan sonra çağrılır
  • Ekran görüntülemeleri ve kullanıcı olayları için analitik göndermek için en uygun yer
  • Akıcılık ve kare düşmesini önlemek için animasyonları viewDidAppear’da başlatın
  • Oluşturmayı geciktirmemek için görünümden sonra ağır asenkron işlemleri başlatın
  • Zamanlayıcıları ve aralıkları viewDidAppear’da başlatın ve viewDidDisappear’da durdurun
  • Tek seferlik eylemlerin yinelenmesini önlemek için bayraklar veya sayaçlar kullanın
  • Navigasyon ve üst denetleyicilerin doğru çalışması için her zaman super.viewDidAppear’ı çağırın

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun