Reputation: 325
How to show user on Map using mapkit in IOS. This code only show the India on the map instead of coordinates defined.
mapView.delegate = self;
mapView.showsUserLocation = YES;
objLocationManager = [[CLLocationManager alloc] init];
objLocationManager.distanceFilter = kCLDistanceFilterNone;
objLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
objLocationManager.delegate = self;
#ifdef __IPHONE_8_0
if(IS_OS_8_OR_LATER) {
// Use one or the other, not both. Depending on what you put in info.plist
//[objLocationManager requestWhenInUseAuthorization];
[objLocationManager requestAlwaysAuthorization];
}
#endif
[objLocationManager startUpdatingLocation];
mapView.showsUserLocation = YES;
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
mapView.delegate=self;
Upvotes: 0
Views: 692
Reputation: 3008
You are starting Location Updates and you will get your current location through it. But how will MKMapview know about the Location Changes?
For MKMap View to adopt Location changes you have to set delegate to MKMapview. That part you have done already, but you forgot the delegate method:
- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation {}
This delegate method will send your current location to MapView. That is all you need.
If you want to use the default Delegate method, then you have to place marker on map with a current coordinate received from CLLocation's Update Method.
If you are going to use default delegate method then don't forget to confirm MKMapViewDelegate.
Let us know if it works. I am sure it will. Have a good day.
Upvotes: 1
Reputation: 119
Step: 1 - Import
import MapKit
import CoreLocation
Step: 2 - Add Delegate
MKMapViewDelegate,CLLocationManagerDelegate
Step: 3 - Declare
@IBOutlet var mapView: MKMapView!
var locationManager = CLLocationManager()
var myLocation = CLLocation()
Step: 4 - Inside ViewDidLoad
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled()
{
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
//MARK: - MapView and Location Manager -
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
self.myLocation = locations.last!
print("NewLocation \(locations[0].coordinate.latitude) \(locations[0].coordinate.longitude)")
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
let annotationIdentifier = "AnnotationIdentifier"
var annotationView: MKAnnotationView?
if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
annotationView = dequeuedAnnotationView
annotationView?.annotation = annotation
}
else
{
let av = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
av.rightCalloutAccessoryView = UIButton(type: .roundedRect)
annotationView = av
}
if let annotationView = annotationView
{
annotationView.canShowCallout = true
annotationView.image = UIImage(named: "Location")
}
return annotationView
}
self.mapView.showsUserLocation = true
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address!) { (placemarks, error) in
guard
let placemarks = placemarks,
let location = placemarks.first?.location
else
{
return
}
let newPin = MKPointAnnotation()
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
self.mapView.setRegion(region, animated: true)
newPin.title = address
newPin.coordinate = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
self.mapView.addAnnotation(newPin)
}
@IBAction func btnDirection(_ sender: Any)
{
let address = self.dictEventDetails.object(forKey: "address") as? String
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address!) { (placemarks, error) in
guard
let placemarks = placemarks,
let location = placemarks.first?.location
else
{
return
}
let coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil))
mapItem.name = address
mapItem.openInMaps(launchOptions:nil)
}
}
Upvotes: 0