0

当您打开 Uber 等地图时,如何添加功能正常的侧边菜单?我希望能够单击显示选项的“侧面菜单”。我遇到的主要问题是我无法“拖动”菜单来折叠它,就像优步应用程序的主页一样。我使用“SWRevealViewController”来创建侧边菜单。

以下是我尝试过的:

    override func viewDidLoad() {
        super.viewDidLoad()

        self.MapView.showsUserLocation = true

        self.revealViewController().tapGestureRecognizer()

menuButton.target = revealViewController()
            menuButton.action = 

#selector(SWRevealViewController.revealToggle(_:))
                view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())


       self.MapView.isZoomEnabled = false;
            self.MapView.isScrollEnabled = false;
            self.MapView.isUserInteractionEnabled = false
    }

按下 menuButton 时会出现侧面菜单,但我似乎无法“拖动”它来折叠它。我认为地图的功能(如缩放、移动等)需要以某种方式禁用,所以它不会不干扰侧边菜单的“拖动”

4

1 回答 1

0

为此,您可以使用SlideMenuControllerSwift而不是SWRevealViewController

在任何情况下它都可以正常工作,您的情况非常简单,平移手势已经用于地图,所以当您尝试使用菜单时它不起作用。

对于实施,SlideMenuControllerSwift您需要执行以下操作,

在你的 pod 文件中添加 pod,

pod 'SlideMenuControllerSwift'

成功安装后添加两个视图控制器YourMapVCLeftMenuVC并在您的AppDelegate文件中添加以下方法,

func createMenu() {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let yourMapVC = storyboard.instantiateViewController(withIdentifier: "YourMapVC") as! YourMapVC
        let leftMenuVC = storyboard.instantiateViewController(withIdentifier: "LeftMenuVC") as! LeftMenuVC

        let nvc = UINavigationController(rootViewController: yourMapVC)

        let slideMenuController = SlideMenuController(mainViewController: nvc, leftMenuViewController: leftMenuVC, rightMenuViewController: UIViewController())
        slideMenuController.automaticallyAdjustsScrollViewInsets = true
        self.window?.backgroundColor = UIColor(red: 236.0, green: 238.0, blue: 241.0, alpha: 1.0)
        self.window?.rootViewController = slideMenuController
        self.window?.makeKeyAndVisible()
    }

在您的didFinishLaunchingWithOptions方法中调用上述方法之后,AppDelegate如下所示,

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        self.createMenu()
        return true
    }

UINavigationBar用于在项目中的任何位置添加菜单按钮。

extension UIViewController {

    func setupNagivationBar() {

        self.removeNavigationBarItem()
        self.setNavigationBarItem()

    }

    func setNavigationBarItem() {

        self.slideMenuController()?.removeLeftGestures()
        self.slideMenuController()?.removeRightGestures()


        self.addLeftBarButtonWithImage(UIImage(named: "icon_menu")!)
        self.slideMenuController()?.addLeftGestures()
        self.slideMenuController()?.removeRightGestures()
        self.slideMenuController()?.closeRight()

        self.navigationController?.navigationBar.barTintColor = UIColor.gray
    }



    func removeNavigationBarItem() {
        self.navigationItem.leftBarButtonItem = nil
        self.navigationItem.rightBarButtonItem = nil
        self.slideMenuController()?.removeLeftGestures()
        self.slideMenuController()?.removeRightGestures()
    }


}

setupNagivationBar()并在您的方法中调用该YourMapVC viewDidLoad方法。

class YourMapVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.setupNagivationBar()

    }

}

您还需要将 icon_menu 图像放入您的项目中。

以下是您可以在屏幕截图中看到的结果。

YourMapVC

左菜单VC

以下是教程链接, https://github.com/dekatotoro/SlideMenuControllerSwift

于 2018-04-03T11:30:57.607 回答