Перейти к функции / zoom to current location (MapKit)

у меня есть mapView, который приближается к текущему местоположению с помощью viewDidLoad :

#define METERS_PER_MILE 1609.344

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];

    mapView.showsUserLocation=TRUE;

    // zoom to  a specific area
    CLLocationCoordinate2D zoomLocation;
    zoomLocation.latitude = -28.994167;
    zoomLocation.longitude = 134.866944;

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 1900*METERS_PER_MILE, 1900*METERS_PER_MILE);
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];    

    // make sure the Google water mark is always visible
    mapView.autoresizingMask =
    (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);

    [mapView setRegion:adjustedRegion animated:YES];        

    mapView.delegate=self;

    searchBar.delegate = self;
}

это прекрасно работает. Я добавил строку поиска и функцию для перехода к определенному местоположению адреса. Это тоже прекрасно работает. Теперь я хочу добавить кнопку, чтобы вернуться к текущему местоположению. Вы можете мне помочь, пожалуйста?

Ура

5 ответов


вам нужно установить центр вашей карты в текущее местоположение при нажатии этой кнопки. Скажи вот так:--2-->

- (IBAction)showCurrentLocation {        
    [mapView setCenterCoordinate:mapView.userLocation.location.coordinate animated:YES];
}

вы можете также попробовать:

mapView.userTrackingMode=YES;
mapView.userTrackingMode=NO;

вы можете связать это IBAction с вашим UIButton, он будет перемещать карту по текущему местоположению и увеличивать ее.

@IBOutlet weak var mapView: MKMapView!

@IBAction func zoomToUserCurrentLocation(sender: AnyObject) {
    if self.mapView != nil {
        self.mapView.setRegion(MKCoordinateRegionMake(
            self.mapView.userLocation.coordinate, 
            MKCoordinateSpanMake(0.1, 0.1)
        ), animated: true)
    }
}

MKCoordinateSpan определяет область, охватываемую областью карты, меньше эти значения, ближе вы масштабируете карту.


- (void)showCurrentLocation{

    MKMapPoint annotationPoint = MKMapPointForCoordinate(self.mapView.userLocation.coordinate);
    MKMapRect zoomRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.0, 0.0);
    [self.mapView setVisibleMapRect:zoomRect animated:YES];
}

ДЛЯ SWIFT

добавить эту строку в действие кнопки yourMKMapView.setUserTrackingMode(.follow, animated: true)

убедитесь, что вы добавить yourMKMapView.showsUserLocation = true на viewDidLoad()