Jak zobrazit polohu uživatele v mapkit?

hlasů
3

Rád bych se zobrazí modrá pulzující tečku pro umístění uživatele. Dělám to:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation    *)newLocation fromLocation:(CLLocation *)oldLocation{
//some other stuff here
[self.mapView setShowsUserLocation:YES];
}

Ale nakonec jsem dostat

-[MKUserLocation establishment]: unrecognized selector sent to instance 0x125e90

Měl jsem to dělat nějakým jiným způsobem?

-- UPRAVIT --

Jsem také dělá, což je místo, kde jsem nakonec dostat výše uvedenou výjimku:

- (MKAnnotationView *) mapView:(MKMapView *)_mapView viewForAnnotation:(AddressNote *) annotation{

if(annotation.establishment != nil){
//do something}

Zřízení je vlastní třída mám na AddressNote. Když zařízení má nějakou hodnotu, dojde k výjimce. Pokud nemám nastavit ShowsUserLocation, vše funguje dobře, ale samozřejmě, nevidím umístění uživatele.

Položena 14/03/2010 v 20:02
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
15

Je-li viewForAnnotationpožadováno, je třeba zkontrolovat wether či nikoliv daná anotace odpovídá aktuální poloze uživatele. Pokud ano, vrátí nil, jinak vrátit své vlastní normální annoationView.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if (annotation==self.mapView.userLocation)
        return nil;
    //then the rest of your code for all your 'classic' annotations.

[EDIT] alternativní způsob, jak je zjistit druh třídy anotaci:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;
    //then the rest of your code for all your 'classic' annotations.

Odpovězeno 16/03/2010 v 10:05
zdroj uživatelem

hlasů
8

Nejste si jisti, co je skutečným problémem je, ale nemusíte to udělat na každé aktualizaci. Nastavte ji jednou po vytváříme mapView, a vy byste měli být v podnikání.

mapView.showsUserLocation = YES;

Možná budete muset přiblížení mapy v regionu, kde je uživatel skutečně je, protože tečka, aby bylo viditelné.

Odpovězeno 14/03/2010 v 20:07
zdroj uživatelem

hlasů
0

Používáte špatnou metodu delegáta. Pro MapView, měli byste použít tuto metodu delegáta chytit polohu uživatele:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Odpovězeno 05/05/2011 v 00:49
zdroj uživatelem

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