MapKit не показывает синюю точку для текущего местоположения

Я новичок в MapKit для iPhone и попытался реализовать это, по какой-то причине я не вижу синюю точку текущего местоположения, у кого-то еще была эта проблема ????

#import "DetailMapViewController.h"
#import "mapAnnotations.h"

@implementation DetailMapViewController

@synthesize inStock;

-(void)getlocation:(CLLocationCoordinate2D)loc
{
    location = loc;
}

- (void)viewDidLoad 
{
    [super viewDidLoad];
    self.navigationItem.title = @"Street View";
    mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    mapView.delegate=self;      
    //MKCoordinateRegion region;
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, 5000, 5000);

    mapAnnotations *ann = [[mapAnnotations alloc] init];
    ann.title = @"";
    ann.subtitle = @"";
    ann.coordinate = region.center;

    mapView.showsUserLocation = YES;
    [mapView addAnnotation:ann];
    [mapView setRegion:region animated:TRUE];
    [mapView regionThatFits:region];
    [self.view insertSubview:mapView atIndex:0];
}


- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];

    if (annotation == mapView.userLocation)
    {

        annView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"blueDot"];
        if (annView != nil)
        {
            annView.annotation = annotation;
        }
        else
        {
            annView = [[[NSClassFromString(@"MKUserLocationView") alloc] initWithAnnotation:annotation reuseIdentifier:@"blueDot"] autorelease];


        }
    }

    if([inStock isEqual:@"yes"]){
        annView.pinColor = MKPinAnnotationColorGreen;
    } 
    if([inStock isEqual:@"no"]){
        annView.pinColor = MKPinAnnotationColorRed;
    }
    if([inStock isEqual:@"unknown"]){

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"greyPin.png"]];
        [annView addSubview:imageView];




    }
    annView.animatesDrop=TRUE;
    annView.canShowCallout = YES;
    annView.calloutOffset = CGPointMake(-5, 5);
    return annView;
}

- (void)dealloc {
    [super dealloc];
}


@end

person vivianaranha    schedule 29.10.2010    source источник
comment
Я вижу, у вас есть showsUserLocation = Да, это должно сработать, если вы не подключили файл XIB к контроллеру mapview к контроллеру?   -  person pdiddy    schedule 30.10.2010
comment
Удостоверились ли вы, что ваше текущее местоположение находится в пределах 5000 м от location выше?   -  person bosmacs    schedule 30.10.2010
comment
Я не был уверен, что нахожусь на 5000 м - я никогда не использовал файлы XIB.   -  person vivianaranha    schedule 30.10.2010
comment
Вы пытаетесь показать синюю точку И другие булавки, обозначающие inStock?   -  person    schedule 30.10.2010
comment
Вы запускаете это в симуляторе? В этом случае ваше текущее местоположение - Бесконечная петля, Купертино.   -  person Paul Ardeleanu    schedule 30.10.2010
comment
Да, но он все еще не показывает текущее местоположение   -  person vivianaranha    schedule 30.10.2010
comment
Появляются другие контакты, но не синяя точка.   -  person vivianaranha    schedule 30.10.2010
comment
Включены ли службы определения местоположения? В 4.0 или более поздних версиях вы можете проверить значение [CLLocationManager locationServicesEnabled]   -  person Paul Ardeleanu    schedule 30.10.2010
comment
Это не в тему, независимо от того, какой у меня вопрос, смогу ли я увидеть свое текущее местоположение в симуляторе?   -  person Emon    schedule 18.01.2012


Ответы (2)


В соответствии с текущим способом написания viewForAnnotation он должен фактически аварийно завершить работу при попытке показать текущее местоположение, потому что представление аннотации «синяя точка» не имеет свойств pinColor или animatesDrop.

Попробуйте изменить его на следующее:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
    if ([annotation isKindOfClass:MKUserLocation.class]) {
        //user location view is being requested,
        //return nil so it uses the default which is a blue dot...
        return nil;
    }

    MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];

    if([inStock isEqual:@"yes"]){
        annView.pinColor = MKPinAnnotationColorGreen;
    } 
    if([inStock isEqual:@"no"]){
        annView.pinColor = MKPinAnnotationColorRed;
    }
    if([inStock isEqual:@"unknown"]){
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"greyPin.png"]];
        [annView addSubview:imageView];
    }
    annView.animatesDrop=TRUE;
    annView.canShowCallout = YES;
    annView.calloutOffset = CGPointMake(-5, 5);
    return annView;
}

На симуляторе местом расположения пользователя будет Купертино, Калифорния, США (немного южнее Сан-Франциско). Если ваша аннотация находится за пределами 5000 метров от нее, вы не увидите синюю точку. Вам придется уменьшить масштаб, чтобы увидеть это.

person Community    schedule 30.10.2010
comment
Это не в тему, независимо от того, какой у меня вопрос, смогу ли я увидеть свое текущее местоположение в симуляторе? - person Emon; 18.01.2012

person    schedule
comment
Если вы внимательно прочитаете вопрос, вы увидите, что он уже использует это свойство. - person psycho; 25.09.2012