Stap 4: Zoek me knop: Toon locatie op de kaart
eerste stap, zullen we de huidige locatie ophalen wanneer de gebruiker op de knop Zoek-me drukt 🧭.
de locatiebeheerder geeft u de huidige locatie in een CLLocation
object met locationManager.location
. Dit object bevat verschillende informatie, waaronder lengte-en breedtegraadcoördinaten.
voeg een annotatie toe aan de kaart
laten we een nieuwe functie maken die een annotatie toevoegt aan de kaart op de opgegeven coördinaten.
de volgende functie maakt een nieuw MKPointAnnotation
object aan en voegt het toe aan de kaart nadat alle voorgaande annotaties zijn verwijderd. Het zoomt en scrollt ook de kaart om de nieuw toegevoegde annotatie in het midden van het scherm te plaatsen.
nu we deze functie hebben, kunt u deze aanroepen met de huidige locatiegegevens die u wilt weergeven, in uw button IBAction-functie. Voor nu zetten we nil
als titel omdat we deze informatie nog niet hebben.
updateLocationOnMap(to: locationManager.location, with: nil)
voeg het volledige adres van de locatie als titel toe aan de annotatie
nu zullen we het volledige adres van de locatie als titel toevoegen aan de annotatie. CoreLocation geeft ons een eenvoudig te doen met CLGeocoder
.
Maak een extensie aan naar CLLocation
en voeg de volgende functie toe:
het zal de geocode-locatie omkeren en geeft u een CLPlacemark
, die alle informatie bevat die nodig is om het volledige postadres te extraheren.
adresgegevens worden opgeslagen zoals hieronder in het plaatsmarkeringsobject. Om een tekenreekswaarde van het volledige adres te krijgen, moet u de componenten samenvoegen die u nodig hebt. Hier is een voorbeeld voor Apple HQ adres op de onderstaande tabel:
laten we een functie toevoegen aan onze CLLocation
extensie die ons direct het volledige adres geeft. Voor het gemak kunt u een nieuwe eigenschap toevoegen in een extensie van CLPlacemark
. In dit voorbeeld wordt deze eigenschap stringValue
genoemd.
laten we nu de aanroep bijwerken naar updateLocationOnMap
met onze nieuwe lookUpLocationName
functie.
bouw en voer uw app uit: nu wanneer u op de knop locate-me drukt, wordt uw huidige locatie toegevoegd op de kaart, met het volledige adres van uw huidige locatie!
voeg een plaatsmarkering van een string-adres toe aan de kaart
het grootste deel van de functie die we in Stap 3 hebben geschreven voor de locate-me-knop zal ook in dit deel worden gebruikt. We zullen alleen een nieuwe functie updatePlaceMark(to address: String)
toevoegen en deze aanroepen op TextField validation.
in deze functie krijgen we eerst plaatsmarkeringen van de door de gebruiker ingevoerde tekenreekswaarde, waarna we de kaart bijwerken met de eerste plaatsmarkering met de volledige adreswaarde.
merk op dat geocodeAddressString
geen locatiezoekfunctie is, dus om het te laten werken heeft het een geldig adres nodig en een identificeerbare locatie, een stad, staat of land in het veld om een resultaat te hebben.
Stap 6: Toon Real-Time locatie op de kaart
voeg de volgende functie delegeren toe aan de CLLocationManagerDelegate
extensie die we al hebben gemaakt om real-time locatie weer te geven.
de locatiebeheerder zal deze functie automatisch aanroepen bij locatie-updates, volgens het beleid dat aan het begin is gedefinieerd.
Stap 7: bouwen & uitvoeren
uw app bouwen en uitvoeren: Je hebt nu een kaart app die u uw huidige locatie, het weergeven van het volledige adres in real time, het lokaliseren van u op een locate-me knop Tik en zodat u kunt zoeken naar locaties uit een tekstveld.