Zoom într-un MKMapView programatic

voturi
23

Eu folosesc o în MKMapViewinteriorul unei aplicații pentru iPhone. Când fac clic pe un buton nivelul de zoom trebuie să crească. Aceasta este prima mea abordare:

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

Cu toate acestea, acest cod a avut nici un efect, din moment ce nu a actualizat valoarea longitudeDelta. Așa că am adăugat această linie:

zoomIn.span.longitudeDelta *= 0.5;

Acum funcționează, dar numai uneori. latitudeDeltaȘi longitudeDeltanu se schimbă în același fel, adică, valorile lor nu sunt proporționale. Orice idee cum să rezolve acest lucru?

Întrebat 23/06/2009 la 11:37
sursa de către utilizator
În alte limbi...                            


9 răspunsuri

voturi
27

N-am idee dacă acest lucru este modul corect de a face acest lucru, dar eu sunt, folosind acest lucru pentru a mări și a micșora.

        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];
    }
Publicat 29/07/2009 la 14:58
sursa de către utilizator

voturi
21

Doar curățare răspunsul lui dkdarel

// 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];

}

Codul SWIFT:

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)
}
Publicat 21/11/2013 la 19:43
sursa de către utilizator

voturi
21

Aici este o soluție mai ușoară:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Publicat 28/11/2012 la 18:40
sursa de către utilizator

voturi
2

Doar tradus soluția dkardel rapidă la:

@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)
}
Publicat 31/03/2015 la 08:43
sursa de către utilizator

voturi
2

Aici este modul meu de a muta harta la punctul de adnotare și zoom destul de aproape de ea. Puteți schimba cu ușurință zoom-ul în linieCGFloat 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];
}
Publicat 01/04/2014 la 11:57
sursa de către utilizator

voturi
1

mapView.setRegion Metoda are o problemă atunci când harta este rotită

Puteți mări harta prin mapView.camera.altitudeproprietate, dar nu este animat:

mapView.camera.altitude *= 1.05

Puteți crea obiect nou aparat de fotografiat și setați-l cu animație:

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)
Publicat 17/05/2017 la 12:33
sursa de către utilizator

voturi
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];
    }
}
Publicat 20/02/2015 la 13:56
sursa de către utilizator

voturi
1

Eu folosesc un cod similar cu a ta și se pare să funcționeze. Ceea ce se poate intampla este ca delta-ul nu se schimbă suficient pentru a determina nivelul de zoom pentru a crește de la un nivel de zoom Google la altul. Acest lucru ar depinde și de starea inițială a hărții, care ar putea explica de ce este intermitent - asa cum setați harta și nivelul de zoom de până la început, înainte ca utilizatorul apasă butonul de zoom?

Ai putea uita, de asemenea în metoda regionThatFits, care va ajusta regiunea le furnizați (nume este din memorie ca eu nu am docs de mere la îndemână).

Publicat 23/06/2009 la 13:16
sursa de către utilizator

voturi
0

În Swift 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Publicat 22/03/2019 la 12:02
sursa de către utilizator

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