我有一个自定义UITabBar控制器,我有按钮在视图控制器之间切换。这是一张图片: http://i.stack.imgur.com/UInLI.png
我想要的是,当按下主按钮时,视图将变为mapViewController,当再次按下时(在同一个mapViewController上),它将显示给用户位置。
findUserLocation()
并使用以下方式显示用户位置:
mapView.userTrackingMode = MGLUserTrackingMode.Follow
所以这是我的代码:
class CustomTabBarViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.tabBar.hidden = true
let tabBarView = CustomTabBarView()
tabBarView.viewdidload()
self.view.addSubview(tabBarView)
tabBarView.mapButton.addTarget(self, action: #selector(self.changeToMyMap), forControlEvents: UIControlEvents.TouchUpInside)
// Do any additional setup after loading the view.
}
func changeToMyMap(){
if (self.selectedIndex != 0){
self.selectedIndex = 0
}else{
let mapViewController = myMap() // the class Name
mapViewController.mapView.userTrackingMode = MGLUserTrackingMode.Follow
}
}
}
因此,当我按下按钮显示用户位置时,我收到错误消息。我想是因为Map没有加载到customTabViewController中,但我不知道如何让它工作。
当我尝试调用函数时 从我的customTabBarController,我的应用程序出现致命错误。
致命错误:在解包可选值时意外发现nil
答案 0 :(得分:0)
如果您尚未使用它们,则可能是某些helpful mapBox resources。
我不确定为什么会因为那里的东西而崩溃 我会尝试放入一些断点来找出它实际崩溃的位置。
尝试在if (self.selectedIndex != 0){
行上放一个,看看它是否真的进入了该方法。
如果是,请尝试在debug console中输入po yourPropertyName
,即po self.selectedIndex
,尝试找出返回的属性为无。
此外,如果您知道哪些属性是可选的,请检查您访问它们的位置。这就是他们可能没有的地方。
答案 1 :(得分:0)
在我们的Swift应用程序中,我们使用showsUserLocation来切换用户位置。
如果您只是想显示用户位置,这将是值得尝试的。
Mapbox iOS SDK 3.2.3中的MGLUserTrackingMode用于跟踪地图上的用户位置(例如,跟随行车路线时的体验)。
如何使用showsUserLocation
func changeToMyMap(){
// not sure if the 'if/else' logic fit with what you intended, but
// left your code intact to better highlight how to use mapView.showsUserLocation
if (self.selectedIndex != 0){
self.selectedIndex = 0
mapViewController.mapView.showsUserLocation = false
}else{
let mapViewController = myMap()
// causes the map view to use the Core Location framework to find the current location
mapViewController.mapView.showsUserLocation = true
}
}
}
请注意Mapbox iOS SDK 3.2.3文档中的这个注释。您需要注意在.plist中设置新密钥。
在iOS 8及更高版本中,您的应用必须为其指定值
NSLocationWhenInUseUsageDescription
或NSLocationAlwaysUsageDescription
in 其Info.plist
以满足底层核心位置的要求 启用此属性时的框架。
比较我们如何在Mapbox中使用showsUserLocation
(产生上述GIF的经验) -
@IBAction func handleSettings(sender: AnyObject) {
var trackingLocation = UIImage(named: "TrackingLocationOffMask.png")
switch (self.mapView.userLocationVisible) {
case true:
self.mapView.showsUserLocation = false
trackingLocation = UIImage(named: "TrackingLocationOffMask.png")
break
case false:
self.mapView.showsUserLocation = true
trackingLocation = UIImage(named: "TrackingLocationMask.png")
break
}
self.navigationItem.leftBarButtonItem?.image = trackingLocation
}