2015-02-17 30 views
6

iOS belgeleri:iOS ile 8 hata dismissViewControllerAnimated: completion: animation? <code>dismissViewControllerAnimated:completion:</code> devletler için

arkaya Eğer mevcut birkaç görünüm denetleyicileri, böylece alt yığınında bir görünümde denetleyicisi bu yöntemi çağırarak, sunulan görünüm denetleyicilerin bir yığını bina onun hemen çocuk görünümü görevden ederse denetleyici ve tüm denetleyicileri bu çocuğun üstündeki yığını. Bu olduğunda, animasyonlu bir modelinde yalnızca en üstteki görünüm reddedilir; Herhangi bir ara görünüm denetleyicisi yığından kolayca kaldırılır. En üstteki görünüm, biçimindeki modal geçişi kullanılarak işten çıkarılır; bu, yığındaki daha düşük görüntüleme denetleyicileri tarafından kullanılan stillerden farklı olabilir. bir kez

[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil];

işten olan üst kalıcı görünümü olmalıdır gösterilen animasyon kullanılarak iki modal görünümü denetleyicileri işten zaman

bu demektir.

Bu gerçekten iOS 7'de ve önceki sürümde geçerlidir, ancak iOS 8'de gösterilen animasyon en üstteki görünüm değildir (deneyimlerimde en üstteki ikinci görünümdür). Bu davranış iOS 8'de bir hata mı yoksa yanlış bir şey mi yapıyorum?

+1

üst çoğu görünümü aniden animasyon başında kaybolur ifade ediyor: İşte bütün görünümü denetleyicileri üzerinde yineleme olmadan Swift benim versiyonu? – AncAinu

+0

Bunun bir hata olduğuna eminim. Aynı zamanda, birden fazla denetleyiciye geri dönen bir gevşeme eylemi yaparsanız da (eğer doğru bir şekilde hatırlamıyorsam, üst görünümün kaybolduğunu görürsünüz, aynı zamanda kısaca, sonuncu denetleyiciden ikincisini görürsünüz). – rdelmar

+0

Apple’a bir hata raporu gönderildi mi? Bunu nasıl yapacağımı veya nasıl kontrol edeceğimi bilmiyorum. – James

cevap

3

Yukarıda yorumlandığı gibi: Ben de aynı soruna bir istek bağlamında bakıyorum. Sadece burada açıklanan bir ekran görüntüsü kullanma gibi geçici çözümü toke ve tüm ara viewControllers bir subview olarak ekleyin: How to dismiss a stack of modal view controllers with animation without flashing on screen any of the presented VCs between the top and bottom?

// this in during unwind in a custom UIStoryboardSegue (that is the reason why it might look wrong with what is what: srcViewController and destViewController 
    UIViewController* aPresentedViewController = destViewController.presentedViewController; 
    while (aPresentedViewController != nil) { 
     if (aPresentedViewController == srcViewController) { 
      break; 
     } 
     UIView *anotherSrcViewCopy = [srcViewController.view snapshotViewAfterScreenUpdates: NO]; 
     anotherSrcViewCopy.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
     [aPresentedViewController.view addSubview:anotherSrcViewCopy]; 
     // recurse through the presentedViewController hierarchy 
     aPresentedViewController = aPresentedViewController.presentedViewController; 
    } 
1

aynı sorunu ve aynı çözüm burada @theguy daha.

guard 
    let presentedViewController = segue.destination.presentedViewController, 
    let viewToCopy    = segue.source.view.snapshotView(afterScreenUpdates: false) 
else { return } 

viewToCopy.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
presentedViewController.view.addSubview(viewToCopy)