[objective-c]用户位置图像 pin 消失的大部分时间

发布时间: 2017/3/27 3:15:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用以下代码

-(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;
    }

问题是,它随机消失,并且再一次出现。给一个非常糟糕的用户体验。要解决此问题任何方式吗?

解决方法 1:

有几个可疑的事情,关于这段代码︰

  • 不使用 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)。

赞助商