2015-05-30 28 views
7

Bir "show" segue (daha önce "push" segue olarak adlandırılır) yönünü (soldan, sağdan, üstten veya alttan) belirtmenin basit bir yolu var mı?"show" yönünü belirtme (push) segue

Varsayılan "show" segue soldan sağa doğru gider, ancak alttan üste gitmesini isterim.

cevap

7

Bunu başarmak için yerleşik bir yöntem olduğuna inanıyorum, ancak iOS7'de tanıtılan Özel Geçişleri kullanabilirsiniz. Dışarıda çok sayıda harika eğitici var. Aşağıda bazı bağlantılar ekledim ve yeni görüntü denetleyicisini yukarıdan nasıl kaydıracağınızı gösteren bazı örnek kodlar ekledim.

Siteler kontrol etmek:

(Not: Bir UIViewController sitesindeki view üçüncü ve dördüncü dökümanında erişilen bir şekilde eskidir.

Öncelikle, ben zaten yaptık kabul edeceğim senin film şeridi kurmak için ihtiyacımız olacak: Yerine toViewController.view size

) örneği transitionContext.viewForKey(UITransitionContextToViewKey) kullanmalıdır.

İkinci olarak, UIViewControllerAnimatedTransitioning'a uygun bir NSObject alt sınıfına ihtiyacınız vardır. Bu, bir görünüm denetleyicisinden diğerine geçişi kontrol etmek için kullanılacaktır.

RayWenderlich: How To Make A View Controller Transition Animation Like in the Ping App öğretici açıklandığı gibi
class TransitionManager : NSObject, UIViewControllerAnimatedTransitioning { 
    let animationDuration = 0.5 

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { 
     return animationDuration 
    } 

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 
     let containerView = transitionContext.containerView() 
     let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! 
     containerView.addSubview(toView) 

     let finalFrame = containerView.bounds 
     let initalFrame = CGRect(x: 0, y: -finalFrame.height, width: finalFrame.width, height: finalFrame.height) 

     toView.frame = initalFrame 
     UIView.animateWithDuration(animationDuration, 
      animations: { toView.frame = finalFrame }, 
      completion: { _ in transitionContext.completeTransition(true) }) 
    } 
} 

, kendi UINavigationController 'ın temsilci bir kurulum gerekir.

class NavigationControllerDelegate: NSObject, UINavigationControllerDelegate { 
    let transitionManager = TransitionManager() 

    func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     if operation == .Push { 
      return transitionManager 
     } 

     return nil 
    } 
} 

Ve işte bu olmalıdır: Aşağıdaki NavigationControllerDelegate sınıf bir itme segue yürütülüyor zaman TransitionManager bir örneğini döndürmek için kullanılacaktır! Bunu genişletmek için Etkileşimli Geçişlere göz atmanızı öneririz.