2015-10-09 4 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 विधि कई बार कहा जाता है। दो समाधान हैं।

1) requestLocation

का प्रयोग करें आप startUpdatingLocation के बजाय requestLocation विधि का उपयोग करते हैं, तो didUpdateLocations विधि कहा जाता है केवल एक बार

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

का प्रयोग करें आप requestLocation के साथ जाना है, तो आपको एक असफल फ़ंक्शन भी जोड़ना होगा: 'func locationManager (प्रबंधक: CLLocationManager, didFailWith त्रुटि त्रुटि: NSError) { // कुछ करें } ' – Dohab

संबंधित मुद्दे

 संबंधित मुद्दे