2015-08-15 3 views
0

Я использую MapBox и инстанцирование так:MapBox расположения анимировать пользователь быть более гладкой

import MapboxGL 


class RideViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate, MGLMapViewDelegate{ 
    @IBOutlet weak var mapViewWrapper: UIView! 
    var mapView: MGLMapView! 

    override func viewDidLoad(){ 
     // Location manager 
     locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.requestAlwaysAuthorization() 
     locationManager.startUpdatingLocation() 
     locationManager.activityType = .Fitness 

     // Mapbox 
     mapView = MGLMapView(frame: mapViewWrapper.bounds, styleURL: NSURL(string: Mapbox.getTheme())) 
     mapView.autoresizingMask = .FlexibleWidth | .FlexibleHeight 
    mapView.userTrackingMode = .Follow 
    mapView.showsUserLocation = true 
    mapView.scrollEnabled = false 
    mapView.rotateEnabled = false 
    mapView.logoView.hidden = true 
    mapView.attributionButton.hidden = true 
     // set the map's center coordinate 
     mapView.setCenterCoordinate(appleMap.userLocation.coordinate, 
      zoomLevel: 12, animated: true) 
     mapViewWrapper.addSubview(mapView) 

    } 

    func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) { 
     myLocations.append(locations[0] as! CLLocation)      
     mapView.setCenterCoordinate(appleMap.userLocation.coordinate, zoomLevel: 16, animated: true)              
    } 

} 

Как вы можете видеть, у меня есть animated: true, но это очень нервные, любые идеи, что я делаю неправильно?

ответ

3

Вы не ошибаетесь, эта библиотека все еще находится в стадии бета-тестирования, и они работают над тем, чтобы добиться более плавного отслеживания пользователей. Что происходит, так это то, что значок местоположения пользователя мгновенно перемещается в новую позицию, но карта оживляет его новый центр. Это заставляет его чувствовать себя довольно нервным. Необходимо анимировать карту (и значок пользователя, если вы хотите), исходя из скорости и хода пользователя.

Однако вы делаете это нелегко. Вместо того, чтобы создавать свой собственный менеджер местоположений и устанавливать центр карты, вы можете просто установить mapView.userTrackingMode, чтобы следовать за пользователем.

+0

Я попытался 'userTrackingMode = .Follow' (как показано выше), но если я не делаю locationManager это не добавляет пользовательский маркер. Не уверен, что я делаю неправильно. Что-то не хватает? – denislexic

0

locationManager Распределите и mapView методы на протяжении жизненного цикла методов UIView, например viewWillAppear, viewDidAppear и т.д.

Это должно дать больше времени к системе для размещения инициализаций вместо того, чтобы бросать запросы все сразу.

Проверить больше о в: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instm/UIViewController/viewDidAppear:

Смежные вопросы