2015-06-23 61 views
0

我正在嘗試使用Xcode 6.3和Swift做iOS應用程序。我使用MKMapView來跟蹤用戶的位置。問題是,如果我滾動地圖,我立即返回到用戶位置。這是我的代碼:無法滾動MKMapView。

override func viewDidLoad() { 
    super.viewDidLoad() 

    manager = CLLocationManager() 
    manager.delegate = self  
    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.requestAlwaysAuthorization()     
    manager.startUpdatingLocation()      

    theMap.delegate = self 
    theMap.mapType = MKMapType.Standard 
    theMap.zoomEnabled = true   
    theMap.addGestureRecognizer(longPress) 
    theMap.scrollEnabled = true 

} 

func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) { 

    let spanX = 0.007 
    let spanY = 0.007 
    var newRegion = MKCoordinateRegion(center: theMap.userLocation.coordinate, span: MKCoordinateSpanMake(spanX, spanY)) 
    theMap.setRegion(newRegion, animated: false) 
    theMap.scrollEnabled = true 

} 

如果我滾動地圖,1秒後,我返回到用戶的位置。我應該改變setRegion方法的位置嗎?

+0

MKCoordinateRegion(中心:這theMap.userLocation.coordinate將返回給用戶位置..... –

回答

0

您需要檢測何時滾動地圖,可能是通過執行MKMapViewDelegate中定義的mapView(_:regionWillChangeAnimated:)方法。在這種方法中,您需要將地圖視圖的userTrackingMode屬性設置爲.None。當用戶平移或縮放變量時,您的實現將被調用。因此,您應該努力保持實現儘可能輕量級,因爲可以多次調用單個平移或縮放手勢。

func mapView(mapView: MKMapView!, regionWillChangeAnimated animated: Bool) { 
    if you want to stop tracking the user { 
     mapView.userTrackingMode = .None 
    } 
} 

當你想重新開始跟隨用戶的位置,這個屬性變回要麼.Follow.FollowWithHeading

enum MKUserTrackingMode : Int { 
    case None // the user's location is not followed 
    case Follow // the map follows the user's location 
    case FollowWithHeading // the map follows the user's location and heading 
} 
+0

非常感謝ndmeriri。我解決了我的問題閱讀文檔。我在locationManager方法中添加了「theMap.setRegion(newRegion,animated:false)」方法,並在其中禁用更新位置時添加了一個地圖分支偵聽器用manager.stopUpdatingLocation()方法。 謝謝! – user2982520