自定义segue实现左面板菜单

时间:2015-07-29 13:02:49

标签: ios swift

我必须实施左侧滑动菜单,例如UBER或Gmail。

我创建了一个自定义segue来将按钮连接到UITableViewController(菜单),工作正常但我有两个问题:

1.-当用户触摸桌面上的任何位置时,表格内容消失

2.-我不知道如何实施"放松"当用户触摸表格之外时,想法是只编写一次此代码而不是每个视图控制器。

My StoryBorad看起来像这样(非常早期的开发):

enter image description here

这是我的segue代码:

import UIKit

class LeftMenuSegue: UIStoryboardSegue {

    override func perform() {
        var content = self.sourceViewController as! UIViewController
        var menu = self.destinationViewController as! UIViewController
        var contentFrame: CGRect = content.view.frame
        menu.view.frame = CGRectMake(-(contentFrame.size.width), 0, contentFrame.size.width/2, contentFrame.size.height)
        var sideFrame: CGRect = menu.view.frame
        var animationFrame = contentFrame
        animationFrame.size.width = contentFrame.size.width/2
        var blackview = UIView(frame: contentFrame)
        blackview.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.5)
        menu.view.alpha = 0
        blackview.alpha = 0
        content.view.superview?.window?.addSubview(blackview)
        content.view.superview?.window?.addSubview(menu.view)
        UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveEaseOut,
            animations: { () -> Void in
                blackview.alpha = 0.5
                menu.view.frame = animationFrame
                menu.view.alpha = 1
            }) { (finished) -> Void in
                menu.didMoveToParentViewController(content)
        }
    }
}

在我的iPhone 6上运行时看起来像这样:

enter image description here

1 个答案:

答案 0 :(得分:0)

对于unwind segue,您需要创建UIStoryboardSegue的另一个类子类。

你可以创建一个tapGesture来关闭菜单,你需要在viewController上定义这个方法

override func segueForUnwindingToViewController(toViewController: UIViewController, fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue {

}

您可以使用此CustomSegue指南:http://www.appcoda.com/custom-segue-animations/

您可以使用pod,而不是创建左侧滑动菜单,如下所示: https://github.com/John-Lluch/SWRevealViewController