2015-10-09 7 views
9

私はマップキットを使っています。ユーザーの現在地をズームするのではなく、地図を拡大してユーザーの場所と注釈付きの点を表示します。マップをユーザーの場所と注釈にズームする(スウィフト2)

現在、私は持っている:

      let annotation = MKPointAnnotation() 
          annotation.coordinate = CLLocationCoordinate2DMake(mapLat, mapLon) 
          annotation.title = mapTitle 
          self.map.addAnnotation(annotation) 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let userLoction: CLLocation = locations[0] 
    let latitude = userLoction.coordinate.latitude 
    let longitude = userLoction.coordinate.longitude 
    let latDelta: CLLocationDegrees = 0.05 
    let lonDelta: CLLocationDegrees = 0.05 
    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 
    let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) 
    let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) 
    self.map.setRegion(region, animated: true) 
    self.map.showsUserLocation = true 
} 

それはちょうど、ユーザーの場所にズームし、それは場所にロックされます。私がスクロールしようとすると、ユーザーの位置に戻るだけです。私は間違って何をしていますか?ユーザーが現在の場所にジャンプすることなくズームまたは移動できるようにするにはどうすればよいですか?

私は、注釈とユーザーの場所を同じビューに表示しようとしています。注釈が遠く離れていても、ユーザーと注釈の両方を表示するためにズームしたいと思います。

答えて

10

didUpdateLocationsメソッドが何度も呼び出されるため、ユーザーの位置に戻るだけです。 2つのソリューションがあります。

1)あなたの代わりstartUpdatingLocationrequestLocation方法を使用する場合requestLocation

を使用して、didUpdateLocations方法は、あなたがrequestLocationで行く場合は、一度だけ

if #available(iOS 9.0, *) { 
    locationManager.requestLocation() 
} else { 
    // Fallback on earlier versions 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let userLoction: CLLocation = locations[0] 
    let latitude = userLoction.coordinate.latitude 
    let longitude = userLoction.coordinate.longitude 
    let latDelta: CLLocationDegrees = 0.05 
    let lonDelta: CLLocationDegrees = 0.05 
    let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 
    let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) 
    let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) 
    self.map.setRegion(region, animated: true) 
    self.map.showsUserLocation = true 
} 

2)フラグ

var isInitialized = false 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if !isInitialized { 
     // Here is called only once 
     isInitialized = true 

     let userLoction: CLLocation = locations[0] 
     let latitude = userLoction.coordinate.latitude 
     let longitude = userLoction.coordinate.longitude 
     let latDelta: CLLocationDegrees = 0.05 
     let lonDelta: CLLocationDegrees = 0.05 
     let span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta) 
     let location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude) 
     let region: MKCoordinateRegion = MKCoordinateRegionMake(location, span) 
     self.map.setRegion(region, animated: true) 
     self.map.showsUserLocation = true 
    } 
} 
+0

を使用すると呼ばれています'func locationManager(manager:CLLocationManager、didFailWithErrorエラー:NSError)も失敗する関数を追加する必要があります。 { //何かを実行 } ' – Dohab

関連する問題