so habe ich gelernt, iOS und für meine Praxis für MapKit, habe ich eine App, die in meiner Region zoomt und setzt eine PIN auf meine Ort (Geo-Koordinaten zum Simulator gegeben), das scheint alles zu funktionieren und ich kann sogar den Pin sehen ...iOS Swift MapKit, Pins von der Suche hinzugefügt Callback-Handler nicht auf der Karte
Aber als nächstes suche ich nach Geschäften in der Nähe mit 'Shop' Keyword und Ausdrucken der Namen des Suchelements im Callback-Handler scheinen sie zu zeigen. Aber die Pins für diese sind nicht auf der Karte.
Ich googelte einige, die mapView (mapView: viewFor:) -> MKAnnotation scheint nicht eine faule Funktion zu sein, die aus der Warteschlange und machen neue MKPinAnnotationView Objekte und sie zurückgeben .... Der Grund, warum ich für faul war wenn ich die Namen jedes Stiftes drucke, der von innen zurückgegeben wird, zeigt es nichts gedruckt, aber wenn ich einen Haltepunkt dort einfüge, wird es es dann zeigen ...
Anders als das, zuerst mal das Pins zeigten, also weiß ich, dass der Code zum Hinzufügen von ihnen funktioniert, aber dann habe ich Titel zu jedem Pin hinzugefügt, jetzt weiß ich nicht, ob es lange dauert, sie zu suchen und die App beendet ihre Arbeit bis dahin oder etwas oder nicht ...
importieren Ameisenbits aus dem Code:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationManager.delegate = self
mapView.delegate = self
if CLLocationManager.authorizationStatus() == .notDetermined {
self.locationManager.requestWhenInUseAuthorization()
}
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
locationManager.delegate = nil
centerMapOnLocation(location: manager.location!)
// Searching for shops
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = "Shop"
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.start(completionHandler: {(response, error) in
if error != nil {
print("Error occured in search: \(error!.localizedDescription)")
} else if response!.mapItems.count == 0 {
print("No matches found")
} else {
print("Matches found")
for item in response!.mapItems {
let shopPin = MKPointAnnotation()
shopPin.coordinate = item.placemark.coordinate
shopPin.title = item.name
self.mapView.addAnnotation(shopPin)
print("Name = \(item.name!)")
//print(shopPin.title)
}
}
})
// Putting a pin on current location
let homePin = MKPointAnnotation()
homePin.coordinate = (manager.location?.coordinate)!
homePin.title = "BitSol Technologies"
mapView.addAnnotation(homePin)
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let pinIdent = "Pin";
var pinView: MKPinAnnotationView;
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: pinIdent) as? MKPinAnnotationView {
dequeuedView.annotation = annotation;
pinView = dequeuedView;
}else{
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: pinIdent);
}
if annotation.coordinate.latitude == locationManager.location!.coordinate.latitude && annotation.coordinate.longitude == locationManager.location!.coordinate.longitude{
pinView.pinTintColor = MKPinAnnotationView.redPinColor();
}else{
pinView.pinTintColor = MKPinAnnotationView.purplePinColor()
}
pinView.canShowCallout = true
print(annotation.title!)
return pinView;
}
ich Ihren Code versucht. dann erscheinen die Pins. https://i.stack.imgur.com/4mQ8o.png –
Nun, meine Suchergebnisse kommen 1-2 Sekunden später als wenn der Titel des aktuellen Standort-Pins druckt .... kann es daran liegen oder so? –