用户位置图像引脚大部分时间消失

时间:2013-04-15 17:51:52

标签: iphone objective-c xcode

我正在使用以下代码

-(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if ([[annotation title] isEqualToString:@"Current Location"] )
    {
        MKAnnotationView *anView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentPin"];

        anView.image = [UIImage imageNamed:@"pin_green.png"];
        anView.canShowCallout = true;
        anView.enabled = true;
        return anView;
    }

问题是,它随机消失并再次出现。给用户带来非常糟糕的体验。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

你应该使用MKMapView的dequeueReusableAnnotationViewWithIdentifier:,看看你是否在使用initWithAnnotation:reuseIdentifier:创建新视图之前获得了一个视图:

MKAnnotationView *anView = [mapView dequeueReusableAnnotationViewWithIdentifier:@"currentPin"];

if (!anView) {
    anView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentPin"];

    anView.image = [UIImage imageNamed:@"pin_green.png"];
    anView.canShowCallout = true;
    anView.enabled = true;
}

return anView;

那就是说,我不完全确定这是你问题的原因。

答案 1 :(得分:0)

关于此代码有几个可疑的事情:

  • 您没有使用dequeue,正如有人指出的那样。特别是,这里的问题是你每次都在制作一个新视图,而不是检查新视图是否需要制作。

  • 您忘记了关键步骤,即将视图与注释相关联。

以下是简单viewForAnnotation:实现的规范结构,我们提供了自己的视图:

- (MKAnnotationView *)mapView:(MKMapView *)mapView
            viewForAnnotation:(id <MKAnnotation>)annotation {
    MKAnnotationView* v = nil;
    if ([annotation.title isEqualToString:@"Current Location"]) {
        static NSString* ident = @"greenPin";
        v = [mapView dequeueReusableAnnotationViewWithIdentifier:ident];
        if (v == nil) {
            v = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                              reuseIdentifier:ident];
            v.image = [UIImage imageNamed:@"pin_green.png"];
            v.canShowCallout = YES;
        }
        v.annotation = annotation;
    }
    return v;
}

由于该代码适合我,我建议你从它开始并根据需要进行调整。

顺便说一句,你不需要这种方法只是为了得到一个绿色的针!你知道吗,对吗? iOS将为您提供绿色图钉(MKPinAnnotationColorGreen)。