Zoom inn en MKMapView programma

stemmer
23

Jeg bruker en MKMapViewinne i en iPhone-app. Når jeg klikker på en knapp zoomnivået må øke. Dette er min første tilnærming:

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

Men hadde denne koden noen effekt, siden jeg ikke oppdatere longitudeDelta verdi. Så jeg lagt denne linjen:

zoomIn.span.longitudeDelta *= 0.5;

Nå fungerer det, men bare noen ganger. Den latitudeDeltaog longitudeDeltaendrer ikke på samme måte, jeg mener, deres verdier er ikke proporsjonal. Noen anelse om hvordan å løse dette?

Publisert på 23/06/2009 klokken 10:37
kilden bruker
På andre språk...                            


9 svar

stemmer
27

Jeg aner ikke om dette er den rette måten å gjøre det, men jeg bruker dette for å zoome inn og ut.

        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];
    }
Svarte 29/07/2009 kl. 13:58
kilden bruker

stemmer
23

Bare rydde opp dkdarel svar

// 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-kode:

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)
}
Svarte 21/11/2013 kl. 18:43
kilden bruker

stemmer
21

Her er en enklere løsning:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Svarte 28/11/2012 kl. 17:40
kilden bruker

stemmer
2

Bare oversatt dkardel løsning til rask:

@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)
}
Svarte 31/03/2015 kl. 08:43
kilden bruker

stemmer
2

Her er min måte å flytte kartet til merknaden punkt og zoome ganske nær den. Du kan enkelt endre zoom på linjeCGFloat 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];
}
Svarte 01/04/2014 kl. 10:57
kilden bruker

stemmer
1

mapView.setRegion Metoden har problem når kartet roteres

Du kan zoome inn på kartet via mapView.camera.altitudeeiendom, men det er ikke animert:

mapView.camera.altitude *= 1.05

Du kan opprette nye kameraet objekt og sette den med animasjon:

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)
Svarte 17/05/2017 kl. 12:33
kilden bruker

stemmer
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];
    }
}
Svarte 20/02/2015 kl. 13:56
kilden bruker

stemmer
1

Jeg bruker samme kode på ditt og det ser ut til å fungere. Hva kan skje er at delta ikke endrer seg nok til å forårsake zoomnivået å øke fra en google zoomnivå til det neste. Dette vil også avhenge av den opprinnelige tilstanden av kartet, noe som kan forklare hvorfor det er forbigående - så hvordan du setter på kartet og zoom-nivå opp til å begynne med, før brukeren trykker på zoomknappen?

Du kan også se nærmere på regionThatFits metode som vil justere den regionen du gi (navn er fra minnet som jeg ikke har eple docs hendig).

Svarte 23/06/2009 kl. 12:16
kilden bruker

stemmer
0

I Swift 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Svarte 22/03/2019 kl. 12:02
kilden bruker

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