通过控制器创建导航抽屉?

时间:2018-06-06 08:40:38

标签: ios swift xcode navigation-drawer

我通过从左到右预先设置一个带有自定义动画的控制器来创建一个演示导航抽屉。当我们关闭控制器时,我们从右到左应用动画。它虽然有效,但抽屉动画看起来不像原生的android抽屉那么好。所以你能告诉我实现这一目标的最佳方法是什么。虽然我不想依赖任何第三方来实现此功能。

@IBAction func actionMenu(_ sender: Any) {

        let controler:DrawerController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DrawerController")
        as! DrawerController
        let transition = CATransition()
        transition.duration = 0.5
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromLeft
        transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionDefault)
        view.window!.layer.add(transition, forKey: kCATransition)
        present(controler, animated: false) {
            controler.drawerView.backgroundColor = UIColor.black
            controler.drawerView.alpha = 0.6
        }
    }

下面是故事板截图 enter image description here enter image description here

3 个答案:

答案 0 :(得分:2)

如果你想在不使用任何第三方的lib的情况下实现这一点,这种方法是可以实现的。

  1. 在MainViewController中添加容器视图。
  2. 使用segue

  3. 将Side TableViewController添加到容器视图
  4. 根据需要设置容器视图的宽度。

  5. 为容器视图的前导,上限,下限和恒定宽度添加约束。

  6. 在视图中创建尾随约束的出口,并将其常量从MainViewController值切换为宽度值减去隐藏,将0显示为显示。

  7. ** MainViewController **

    /* ... */
    for(;;){
        System.out.print("Enter a score. -1 to quit: ");
         int score = in.nextInt();
         if(score == -1){
             break;
         } else{
             totalScore += score;
             entry++;
         }
    }
    /* ... */
    

    <强> SlideTableViewController

    import UIKit
    
    class MainViewController: UIViewController {
        @IBOutlet var leadingConstraint: NSLayoutConstraint!
    
        @IBOutlet weak var containerView: UIView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        @IBAction func openView(_ sender: Any) {
            if leadingConstraint.constant == -250{
                leadingConstraint.constant = 0
            }
            else{
                leadingConstraint.constant = -250
            }
            UIView.animate(withDuration: 0.4) {
                self.view.layoutIfNeeded()
            }
        }
    
    }
    

    enter image description here enter image description here

    <强>结果

答案 1 :(得分:0)

您可以将UIView的 .xib 作为导航抽屉,并应用自定义动画,通过更改它的X坐标从左到右呈现此UIView,而不是使用另一个ViewController。它的框架。

答案 2 :(得分:0)

尝试使视图控制器具有自由形式大小,并使用

显示控制器
viewController.modalPresentationStyle = .OverCurrentContext
yourContorller.presentViewController(viewController, animated: true, completion: nil)