Bir bellek sızıntısını araştırırken, setRootViewController:
bir geçiş animasyonu bloğunun içinde arama tekniğiyle ilgili bir sorun keşfettim :
[UIView transitionWithView:self.window
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ self.window.rootViewController = newController; }
completion:nil];
Eski görünüm denetleyicisi (değiştirilen) şu anda başka bir görünüm denetleyicisini sunuyorsa, yukarıdaki kod sunulan görünümü görünüm hiyerarşisinden kaldırmaz.
Yani, bu işlemler dizisi ...
- X, Kök Görünüm Denetleyicisi olur
- X, Y'yi gösterir, böylece Y'nin görünümü ekranda olur
transitionWithView:
Z'yi yeni Kök Görünüm Denetleyicisi yapmak için kullanma
... kullanıcıya iyi görünüyor, ancak Hata Ayıklama Görünümü Hiyerarşisi aracı, Y'nin görünümünün hala Z'nin görünümünün arkasında, a UITransitionView
. Yani, yukarıdaki üç adımdan sonra görünüm hiyerarşisi şöyledir:
- UIWindow
- UITransitionView
- UIView (Y'nin görünümü)
- UIView (Z'nin görünümü)
- UITransitionView
Bunun bir sorun olduğundan şüpheleniyorum çünkü geçiş sırasında X'in görüşü aslında görünüm hiyerarşisinin bir parçası değil.
dismissViewControllerAnimated:NO
Hemen önce X'e gönderirsem transitionWithView:
, ortaya çıkan görünüm hiyerarşisi şu şekilde olur:
- UIWindow
- UIView (X'in görünümü)
- UIView (Z'nin görünümü)
dismissViewControllerAnimated:
X'e (EVET veya HAYIR) gönderirsem , completion:
blokta geçişi gerçekleştirirsem , görünüm hiyerarşisi doğrudur. Ne yazık ki, bu animasyona engel oluyor. İşten çıkarmayı canlandırırsanız, zaman kaybeder; animasyon yapmıyorsa, bozuk görünüyor.
Başka yaklaşımlar deniyorum (örneğin, kök görünüm denetleyicim olarak hizmet etmesi için yeni bir kapsayıcı görünümü denetleyici sınıfı yapmak) ancak işe yarayan hiçbir şey bulamadım. Bu soruyu ilerledikçe güncelleyeceğim.
Nihai amaç, sunulan görünümden yeni bir kök görünüm denetleyicisine doğrudan ve etrafta başıboş görünüm hiyerarşileri bırakmadan geçiş yapmaktır.