Πώς να ακολουθήσει τη θέση του χρήστη με MapKit

ψήφοι
10

Είμαι χρησιμοποιώντας MapKit να εμφανιστεί θέση σε σχέση του χρήστη με καρφίτσες γύρω τους. Θα ήθελα να είναι σε θέση να μιμηθεί την λειτουργικότητα που Maps παρέχει μέσω του πλήκτρου σταυρόνημα στην κάτω αριστερή γωνία της οθόνης. Είμαι ήδη γνωρίζουν ότι MapKit παρέχει ένα αντικείμενο CLLocation με τη θέση του χρήστη μέσω MKUserLocation, θα ήθελα απλώς να ζητήσει συμβουλές σχετικά με το πώς θα πρέπει να κρατήσει την εστίαση σε αυτή τη θέση. Η αρχική μου κλίση ήταν να χρησιμοποιήσετε ένα NSTimer για να κεντράρετε το χάρτη για να συντονίσει κάθε 500ms ή έτσι.

Υπάρχει καλύτερος τρόπος για να γίνει αυτό; Υπάρχει κάτι που χτίστηκε για να MapKit που είμαι λείπει ότι θα επιτευχθεί αυτό;

Ευχαριστώ πολύ, Μπρένταν

Δημοσιεύθηκε 14/03/2010 στις 02:09
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
39

Αν είστε σε IOS5 + Αυτό είναι πολύ εύκολο. Απλά αλλάξτε το «userTrackingMode» χρησιμοποιώντας τον κωδικό όπως:

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

Αυτό θα ακολουθήσει ομαλά στους χρήστες την τρέχουσα θέση. Αν σύρετε το χάρτη που θα θέσει ακόμα τη λειτουργία παρακολούθησης πίσω MKUserTrackingModeNoneοποίων είναι συνήθως η συμπεριφορά που θέλετε.

Απαντήθηκε 20/04/2013 στις 10:40
πηγή χρήστη

ψήφοι
12

Είναι πολύ απλό να έχει ο χάρτης ενημερώσει τη θέση του χρήστη αυτόματα ακριβώς όπως τα Google Maps. Απλά που showsUserLocation σε ΝΑΙ

self.mapView.showsUserLocation = YES

... και στη συνέχεια να εφαρμόσει το MKMapViewDelegate να επανεξετάσει το κέντρο του χάρτη, όταν η θέση είναι ενημερωμένο.

-(void)               mapView:(MKMapView *)mapView 
        didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if( isTracking )
    {
        pendingRegionChange = YES;
        [self.mapView setCenterCoordinate: userLocation.location.coordinate
                                 animated: YES];
    }
}

Και για να επιτρέπουν στο χρήστη να κάνετε ζουμ και τηγάνι, χωρίς να κλέβει τη θέα πίσω στην τρέχουσα θέση ...

-(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
    if( isTracking && ! pendingRegionChange )
    {
         isTracking = NO;
         [trackingButton setImage: [UIImage imageNamed: @"Location.png"] 
                         forState: UIControlStateNormal];
    }

    pendingRegionChange = NO;
}

-(IBAction) trackingPressed
{
    pendingRegionChange = YES;
    isTracking = YES;
    [mapView setCenterCoordinate: mapView.userLocation.coordinate 
                        animated: YES];

    [trackingButton setImage: [UIImage imageNamed: @"Location-Tracking.png"] 
                    forState: UIControlStateNormal];
}
Απαντήθηκε 01/09/2010 στις 02:42
πηγή χρήστη

ψήφοι
7

Νομίζω ότι θα χρησιμοποιήσει πραγματικά το CoreLocation CLLocationManagerκαι να χρησιμοποιήσει τη μέθοδο εκπροσώπου της locationManager:didUpdateToLocation:fromLocation:.

Με αυτό τον τρόπο, δεν έχετε την επιβάρυνση ενός NSTimer, και ενημερώνει μόνο όταν υπάρχει μια νέα θέση διαθέσιμο.

Μπορείτε να τραβήξει το γεωγραφικό μήκος και το γεωγραφικό πλάτος από το CLLocationαντικείμενο που αποστέλλονται στην locationManager:didUpdateToLocation:fromLocation:μέθοδο και να περάσει στην προβολή χάρτη.

Απαντήθηκε 14/03/2010 στις 05:24
πηγή χρήστη

ψήφοι
0

Θα πάω με την απάντηση Jacob Relkin του. Αυτό το σεμινάριο παρέχει ένα βήμα-προς-βήμα διαδικασία χρησιμοποιώντας CoreLocation σε ένα iPhone app. Ελπίζω ότι αυτό σας βοηθά.

Τα καλύτερα.

Απαντήθηκε 14/03/2010 στις 06:17
πηγή χρήστη

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