Zoom in einem MKMapView programmatisch

stimmen
23

Ich bin mit einem MKMapViewinnerhalb eines iPhone - App. Wenn ich auf eine Schaltfläche klicken muss die Zoomstufe erhöhen. Dies ist mein erster Ansatz:

MKCoordinateRegion zoomIn = mapView.region;
zoomIn.span.latitudeDelta *= 0.5;
[mapView setRegion:zoomIn animated:YES];

Allerdings hatte dieser Code keine Auswirkung, da ich nicht den longitudeDelta Wert aktualisiert wurde. Also habe ich diese Zeile:

zoomIn.span.longitudeDelta *= 0.5;

Jetzt funktioniert es, aber nur manchmal. Das latitudeDeltaund longitudeDeltanicht auf die gleiche Art und Weise ändern, ich meine, sind ihre Werte nicht proportional. Jede Idee , wie dieses Problem zu lösen?

Veröffentlicht am 23/06/2009 um 11:37
quelle vom benutzer
In anderen Sprachen...                            


9 antworten

stimmen
27

Ich habe keine Ahnung, ob dies der richtige Weg ist, es zu tun, aber ich bin mit diesem in vergrößern und verkleinern.

        case 0: { // Zoom In
        //NSLog(@"Zoom - IN");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;

        span.latitudeDelta=mapView.region.span.latitudeDelta /2.0002;
        span.longitudeDelta=mapView.region.span.longitudeDelta /2.0002;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
        break;

    // Zoom Out 
    case 2: {
        //NSLog(@"Zoom - OUT");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;
        span.latitudeDelta=mapView.region.span.latitudeDelta *2;
        span.longitudeDelta=mapView.region.span.longitudeDelta *2;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
Beantwortet am 29/07/2009 um 14:58
quelle vom benutzer

stimmen
21

Reinigung nur dkdarel Antwort auf

// delta is the zoom factor
// 2 will zoom out x2
// .5 will zoom in by x2
- (void)zoomMap:(MKMapView*)mapView byDelta:(float) delta {

    MKCoordinateRegion region = mapView.region;
    MKCoordinateSpan span = mapView.region.span;
    span.latitudeDelta*=delta;
    span.longitudeDelta*=delta;
    region.span=span;
    [mapView setRegion:region animated:YES];

}

SWIFT-Code:

func zoomMap(byFactor delta: Double) {
    var region: MKCoordinateRegion = self.mapView.region
    var span: MKCoordinateSpan = mapView.region.span
    span.latitudeDelta *= delta
    span.longitudeDelta *= delta
    region.span = span
    mapView.setRegion(region, animated: true)
}
Beantwortet am 21/11/2013 um 19:43
quelle vom benutzer

stimmen
21

Hier ist eine einfachere Lösung:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Beantwortet am 28/11/2012 um 18:40
quelle vom benutzer

stimmen
2

Gerade dkardel Lösung zu schnellen übersetzt:

@IBAction func zoomOutButtonClicked(sender: UIButton) {
    let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta*2, longitudeDelta: mapView.region.span.longitudeDelta*2)
    let region = MKCoordinateRegion(center: mapView.region.center, span: span)

    mapView.setRegion(region, animated: true)
}

@IBAction func zoomInButtonClicked(sender: UIButton) {
    let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta/2, longitudeDelta: mapView.region.span.longitudeDelta/2)
    let region = MKCoordinateRegion(center: mapView.region.center, span: span)

    mapView.setRegion(region, animated: true)
}
Beantwortet am 31/03/2015 um 08:43
quelle vom benutzer

stimmen
2

Hier ist meine Art und Weise Karte an den Anmerkungspunkt und Zoom ziemlich nah an ihn zu bewegen. Sie können ganz einfach den Zoom in Zeile ändernCGFloat newLatDelta = 0.06f;

- (void)moveMapToAnnotation:(MKPointAnnotation*)annotation
{
    CGFloat fractionLatLon = map.region.span.latitudeDelta / map.region.span.longitudeDelta;
    CGFloat newLatDelta = 0.06f;
    CGFloat newLonDelta = newLatDelta * fractionLatLon;
    MKCoordinateRegion region = MKCoordinateRegionMake(annotation.coordinate, MKCoordinateSpanMake(newLatDelta, newLonDelta));
    [map setRegion:region animated:YES];
}
Beantwortet am 01/04/2014 um 11:57
quelle vom benutzer

stimmen
1

mapView.setRegion Methode hat Problem, wenn Ihre Karte gedreht wird

Sie können Karte über heran mapView.camera.altitudeEigenschaft, aber es ist nicht animiert:

mapView.camera.altitude *= 1.05

Sie können neue Kamera-Objekt erstellen und es mit Animation festgelegt:

let currentCamera = mapView.camera
let newCamera: MKMapCamera
if #available(iOS 9.0, *) {
    newCamera = MKMapCamera(lookingAtCenter: currentCamera.centerCoordinate, fromDistance: currentCamera.altitude * 2, pitch: currentCamera.pitch, heading: currentCamera.heading)
} else {
    newCamera = MKMapCamera()
    newCamera.centerCoordinate = currentCamera.centerCoordinate
    newCamera.heading = currentCamera.heading
    newCamera.altitude = currentCamera.altitude * 2
    newCamera.pitch = currentCamera.pitch
}

mapView.setCamera(newCamera, animated: true)
Beantwortet am 17/05/2017 um 12:33
quelle vom benutzer

stimmen
1
- (IBAction)btnZoomInPressed
{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    region.center.latitude = lati;
    region.center.longitude = longi;
    span.latitudeDelta=viewMapSingleVenue.region.span.latitudeDelta /2.0002;
    span.longitudeDelta=viewMapSingleVenue.region.span.longitudeDelta /2.0002;
    region.span=span;
    [viewMapSingleVenue setRegion:region animated:TRUE];
}

- (IBAction)btnZoomOutPressed
{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    region.center.latitude = lati;
    region.center.longitude = longi;
    span.latitudeDelta=viewMapSingleVenue.region.span.latitudeDelta *2;
    span.longitudeDelta=viewMapSingleVenue.region.span.longitudeDelta *2;
    if(span.latitudeDelta < 200)
    {
    region.span=span;
    [viewMapSingleVenue setRegion:region animated:TRUE];
    }
}
Beantwortet am 20/02/2015 um 13:56
quelle vom benutzer

stimmen
1

Ich benutze einen ähnlichen Code zu verkaufen, und es scheint zu funktionieren. Was kann passieren, dass Ihr Delta nicht genug verändert sich die Zoomstufe zu veranlassen, von einem Google-Zoom-Ebene zur nächsten zu erhöhen. Dies würde auch auf den Ausgangszustand Ihrer Karte ab, die erklären könnte, warum es intermittierend ist - so wie kann man die Karte und Zoom-Ebene nach oben zu beginnen, bevor der Benutzer die Zoom-Taste drückt?

Sie könnten auch die regionThatFits Methode suchen, in denen die Region, die Sie liefern anpassen (Name aus dem Speicher ist, wie ich habe nicht den Apfel docs praktisch).

Beantwortet am 23/06/2009 um 13:16
quelle vom benutzer

stimmen
0

In Swift 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Beantwortet am 22/03/2019 um 12:02
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more