2015-04-02 12 views
10
ile iOS 8'de özel görünüm denetleyicisi geçişlerini uygulama konusunda this tutorial'u takip ediyorum ve şimdiye kadar her şey mantıklı geliyor, ancak görünüm denetleyicimin doğru boyutta olmasını sağlayamıyorum. Ben frameOfPresentedViewInContainerView hariç hepsi anlamak

Görünüm denetleyici boyutumu neden frameOfPresentedViewInContainerView ile tanımlamıyor?

class OverlayPresentationController: UIPresentationController { 
    let dimmingView = UIView() 

    override init(presentedViewController: UIViewController!, presentingViewController: UIViewController!) { 
    super.init(presentedViewController: presentedViewController, presentingViewController: presentingViewController) 
    dimmingView.backgroundColor = UIColor(white: 0.0, alpha: 0.5) 
    } 

    override func presentationTransitionWillBegin() { 
    dimmingView.frame = containerView.bounds 
    dimmingView.alpha = 0.0 
    containerView.insertSubview(dimmingView, atIndex: 0) 

    presentedViewController.transitionCoordinator()?.animateAlongsideTransition({ 
     context in 
     self.dimmingView.alpha = 1.0 
    }, completion: nil) 
    } 

    override func dismissalTransitionWillBegin() { 
    presentedViewController.transitionCoordinator()?.animateAlongsideTransition({ 
     context in 
     self.dimmingView.alpha = 0.0 
    }, completion: { 
     context in 
     self.dimmingView.removeFromSuperview() 
    }) 
    } 

    override func frameOfPresentedViewInContainerView() -> CGRect { 
    return containerView.bounds.rectByInsetting(dx: 30, dy: 30) 
    } 

    override func containerViewWillLayoutSubviews() { 
    dimmingView.frame = containerView.bounds 
    presentedView().frame = frameOfPresentedViewInContainerView() 
    } 
} 

: O eğitimde

, bunlar şu kodu var. ancak boyutlarını döndürür, 'u containerViewWillLayoutSubviews içinde kaldırırsam çalışmaz. Neden bu çizgiye sahip olmalıyım? Fonksiyonun kendisinin yeterli olacağını düşünürdünüz, aksi takdirde containerViewWillLayoutSubviews yönteminde rastgele bir boyut uygulayacağım.

cevap

0

Ekran görünümü döndüğünde sunulan görünüm çerçevesinin güncellenmesini istiyorsanız, yalnızca bu satıra sahip olmanız gerekir.

3

frameOfPresentedViewInContainerView bir animasyon ayarlarken bu sunulan bakış hedef pozisyonu bilir ve böylece (UIViewControllerAnimatedTransitioning protokolüne uygun olarak) daha sonra bir canlandırmacı geçirilir ilk presentedView karesini almak için UIKit tarafından kullanılır. Sunum bittikten ve sunum tamamlandıktan sonra ekran veya üst görünüm denetleyicilerinden biri döndürme veya boyut sınıfı değişikliği nedeniyle yeniden boyutlandırılabilir. UIPresentationController örneği, containerViewWillLayoutSubviews yönteminde bu değişikliklere yanıt verme ve sunumları uygun şekilde yeniden boyutlandırma şansına sahiptir.

Başka bir deyişle, sunu denetleyicisi, sunulan görünüm için düzenin belirlenmesinden her zaman sorumludur, ancak başlangıçta UIKit'e çerçevenin ne olduğunu animator'un bu bilgileri kullanabileceğini söyler, ancak daha sonra sunum denetleyicisi kareyi ayarlar. sunulan görünüm doğrudan.

İlgili konular