Ζουμ σε μια MKMapView προγραμματισμού

ψήφοι
23

Είμαι χρησιμοποιώντας ένα MKMapViewμέσα σε ένα iPhone app. Όταν κάνω κλικ σε ένα κουμπί το επίπεδο ζουμ πρέπει να αυξηθεί. Αυτή είναι η πρώτη μου προσέγγιση:

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

Ωστόσο, αυτός ο κώδικας δεν είχε κανένα αποτέλεσμα, δεδομένου ότι δεν ενημέρωσε την αξία longitudeDelta. Γι 'αυτό και πρόσθεσε αυτή τη γραμμή:

zoomIn.span.longitudeDelta *= 0.5;

Τώρα δουλεύει, αλλά μόνο μερικές φορές. Η latitudeDeltaκαι longitudeDeltaδεν αλλάζουν με τον ίδιο τρόπο, εννοώ, οι τιμές τους δεν είναι ανάλογη. Οποιαδήποτε ιδέα για το πώς να λύσει αυτό;

Δημοσιεύθηκε 23/06/2009 στις 11:37
πηγή χρήστη
Σε άλλες γλώσσες...                            


9 απαντήσεις

ψήφοι
27

Δεν έχω ιδέα αν αυτό είναι ο σωστός τρόπος για να το κάνουμε, αλλά είμαι με τη χρήση αυτό για να κάνετε ζουμ μέσα και έξω.

        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];
    }
Απαντήθηκε 29/07/2009 στις 14:58
πηγή χρήστη

ψήφοι
21

Απλά καθαρισμό απάντηση 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];

}

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)
}
Απαντήθηκε 21/11/2013 στις 19:43
πηγή χρήστη

ψήφοι
21

Εδώ είναι μια πιο εύκολη λύση:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Απαντήθηκε 28/11/2012 στις 18:40
πηγή χρήστη

ψήφοι
2

Απλά μεταφραστεί λύση dkardel στην ταχεία:

@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)
}
Απαντήθηκε 31/03/2015 στις 08:43
πηγή χρήστη

ψήφοι
2

Εδώ είναι ο τρόπος μου για να μετακινηθείτε χάρτη στο σημείο σχολιασμό και ζουμ πολύ κοντά σε αυτό. Μπορείτε εύκολα να αλλάξετε το ζουμ σε γραμμήCGFloat 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];
}
Απαντήθηκε 01/04/2014 στις 11:57
πηγή χρήστη

ψήφοι
1

mapView.setRegion μέθοδος έχει πρόβλημα όταν χάρτη σας περιστρέφεται

Μπορείτε να κάνετε ζουμ χάρτη μέσω της mapView.camera.altitudeιδιοκτησίας, αλλά δεν κινουμένων σχεδίων:

mapView.camera.altitude *= 1.05

Μπορείτε να δημιουργήσετε νέο αντικείμενο κάμερα και να το θέσει με κινούμενα σχέδια:

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)
Απαντήθηκε 17/05/2017 στις 12:33
πηγή χρήστη

ψήφοι
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];
    }
}
Απαντήθηκε 20/02/2015 στις 13:56
πηγή χρήστη

ψήφοι
1

Χρησιμοποιώ παρόμοιο κώδικα με τα δικά σας και φαίνεται να δουλεύει. Τι μπορεί να συμβαίνει είναι ότι δέλτα σας δεν αλλάζει αρκετή για να προκαλέσει το επίπεδο ζουμ για να αυξηθεί από το ένα επίπεδο google ζουμ στην επόμενη. Αυτό θα εξαρτηθεί και από την αρχική κατάσταση του χάρτη σας, η οποία θα μπορούσε να εξηγήσει γιατί είναι διαλείπουσα - οπότε πώς να ρυθμίσετε το χάρτη και το επίπεδο ζουμ μέχρι να αρχίσει με, πριν ο χρήστης πατήσει το κουμπί ζουμ;

Θα μπορούσατε επίσης να εξετάσει τη μέθοδο regionThatFits που θα προσαρμόσει την περιοχή που σας παρέχουν (το όνομα είναι από τη μνήμη και δεν έχω τα έγγραφα μήλο πρακτικό).

Απαντήθηκε 23/06/2009 στις 13:16
πηγή χρήστη

ψήφοι
0

Σε Swift 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Απαντήθηκε 22/03/2019 στις 12:02
πηγή χρήστη

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