2017-04-18 17 views
0

シンプルなトランジションを実行しても呼び出されない私がここで逃したものは得られません。誰でも助けてください。エラーや警告が表示されません。UIViewControllerAnimatedトランジションが発砲しない

アニメーションクラス - :

import UIKit 

class ItemsTableViewController: UITableViewController,UIViewControllerTransitioningDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 
    let customPresentAnimationController = CustomPresentAnimationController() 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "showAction" { 
      let toViewController = segue.destination as! ActionViewController 
      toViewController.transitioningDelegate = self 
     } 
    } 
    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 5 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as UITableViewCell 
     cell.textLabel?.text = "Item 0\(indexPath.row + 1)" 
     return cell 
    } 

    func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     return customPresentAnimationController 
    } 

} 

ToViewcontroller-:ビューcontroller-から

import UIKit 

class CustomPresentAnimationController: NSObject,UIViewControllerAnimatedTransitioning { 

    public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval 
    { 
     return 2.5 
    } 
    // This method can only be a nop if the transition is interactive and not a percentDriven interactive transition. 
    public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) 

    { 
     let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) 
     let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) 
     let finalViewcontroller = transitionContext.finalFrame(for: toViewController!) 
     let bounds = UIScreen.main.bounds 
     toViewController?.view.frame = finalViewcontroller.offsetBy(dx: 0, dy: bounds.size.height) 
     print(transitionDuration(using: transitionContext)) 
     let containerView = transitionContext.containerView 
     containerView.addSubview((toViewController?.view)!) 

     UIView.animate(withDuration: transitionDuration(using: transitionContext),delay: 0.1,options: UIViewAnimationOptions.curveEaseIn,animations: {() -> Void in 
      fromViewController?.view.alpha = 0.5 
      toViewController?.view.frame = finalViewcontroller 
     },completion: { (finished) -> Void in 

      transitionContext.completeTransition(true) 
      fromViewController?.view.alpha = 1.0 
     }) 
    } 


} 

あなたがのコピー/貼り付け迅速2バージョンを持っているよう

import UIKit 

class ActionViewController: UIViewController { 

    @IBAction func dismiss(_ sender: UIButton) { 
     self.dismiss(animated: true, completion: nil) 
    } 

} 

答えて

1

が見えますメソッドは署名が異なります:

func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return Transition() 
} 

func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return Transition() 
} 

EDIT:おそらく、移行の新しいインスタンスを返して、先頭にletを取り除くのが最も良いでしょう。

+0

ご協力いただきありがとうございます。 –

関連する問題