2016-06-24 9 views
1

私はカスタムUITabBarコントローラを持っています。ここには、ビューコントローラを切り替えるボタンがあります。 http://i.stack.imgur.com/UInLI.pngカスタムUITabBarControllerのボタンが押されたときのユーザの位置を表示

私は、メインボタンが押されたときにビューがmapViewControllerに変更されること、それを行うには、それが(同じmapViewControllerに)もう一度押すと、それは、ユーザーの場所に表示されます欲しい:ここではイメージです。

mapView.userTrackingMode = MGLUserTrackingMode.Follow

をだからここに:私は、私は私のmapViewControllerで機能を持って、私の地図のAPIとして

findUserLocation()

、これは使用してユーザーの場所を表示しmapBoxを使用しています

  • は私のコードです:

    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から関数 を呼び出そうとすると、アプリケーションに致命的なエラーが発生します。

    fatal error: unexpectedly found nil while unwrapping an Optional value

+0

をそれよりも多くの情報が役立ちます。あなたはあなたが得ているエラーを表示できますか? – Xeaza

+0

自分の投稿を編集してより明確にします。 –

答えて

0

あなたは既にそれらを使用していない場合、これらはいくつかのhelpful mapBox resourcesかもしれません。

私はあなたがそこに持っているものでなぜクラッシュするのか分かりません。
実際にどこがクラッシュするのかを知るためにいくつかのブレークポイントを入れてみることにします。

if (self.selectedIndex != 0){ に実際にそのメソッドの中に入っているかどうかを確認してください。

場合は、 をdebug consoleに入力して、どのプロパティがnilを返すかを調べてみます。

また、オプションのプロパティがわかっている場合は、そのプロパティにアクセスしている場所を確認してください。それはどこにもないかもしれない。

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に新しいキーを設定するには注意が必要です。

On iOS 8 and above, your app must specify a value for NSLocationWhenInUseUsageDescription or NSLocationAlwaysUsageDescription in its Info.plist to satisfy the requirements of the underlying Core Location framework when enabling this property.


我々は(上のGIFの経験生成するもの)Mapboxで showsUserLocationを使用する方法の比較については

enter image description here

- 私たちは少しを必要とするつもりだと思う

@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 
    } 
関連する問題