MapView 中的侧边菜单 XCode
Side Menu Within MapView XCode
打开地图时,如何添加位于地图(如优步)中的功能性侧边菜单?我希望能够单击显示选项的 "side menu"。我遇到的主要问题是无法 "drag" 折叠菜单,就像 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 时侧边菜单出现,但我似乎无法 "drag" 折叠 it.Im 认为地图的功能(例如缩放、移动等) ) 需要以某种方式禁用,这样它就不会干扰侧边菜单的 "dragging"
为此你可以使用 SlideMenuControllerSwift 而不是 SWRevealViewController
在任何情况下它都可以正常工作你的情况是非常简单的平移手势已经用于地图所以当你尝试用于菜单时它不起作用。
要实施 SlideMenuControllerSwift
,您需要执行以下操作,
在您的 pod 文件中添加 pod,
pod 'SlideMenuControllerSwift'
成功安装后添加两个视图控制器 YourMapVC
和 LeftMenuVC
并在您的 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()
}
在 AppDelegate
的 didFinishLaunchingWithOptions
方法中调用上述方法后,如下所示,
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()
}
}
并在 YourMapVC
viewDidLoad
方法中调用 setupNagivationBar()
方法。
class YourMapVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.setupNagivationBar()
}
}
您还需要将 icon_menu 图片放入您的项目中。
下面是您可以在屏幕截图中看到的结果。
教程如下Link,
https://github.com/dekatotoro/SlideMenuControllerSwift
打开地图时,如何添加位于地图(如优步)中的功能性侧边菜单?我希望能够单击显示选项的 "side menu"。我遇到的主要问题是无法 "drag" 折叠菜单,就像 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 时侧边菜单出现,但我似乎无法 "drag" 折叠 it.Im 认为地图的功能(例如缩放、移动等) ) 需要以某种方式禁用,这样它就不会干扰侧边菜单的 "dragging"
为此你可以使用 SlideMenuControllerSwift 而不是 SWRevealViewController
在任何情况下它都可以正常工作你的情况是非常简单的平移手势已经用于地图所以当你尝试用于菜单时它不起作用。
要实施 SlideMenuControllerSwift
,您需要执行以下操作,
在您的 pod 文件中添加 pod,
pod 'SlideMenuControllerSwift'
成功安装后添加两个视图控制器 YourMapVC
和 LeftMenuVC
并在您的 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()
}
在 AppDelegate
的 didFinishLaunchingWithOptions
方法中调用上述方法后,如下所示,
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()
}
}
并在 YourMapVC
viewDidLoad
方法中调用 setupNagivationBar()
方法。
class YourMapVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.setupNagivationBar()
}
}
您还需要将 icon_menu 图片放入您的项目中。
下面是您可以在屏幕截图中看到的结果。
教程如下Link, https://github.com/dekatotoro/SlideMenuControllerSwift