【问题标题】:Change Pin Color when user tapped用户点击时更改引脚颜色
【发布时间】:2011-08-18 13:37:42
【问题描述】:

当用户点击除了更改其标题和副标题时,我会将注释的颜色从红色更改为绿色。

我真的迷路了。我搜索了如何制作自定义注释图钉,好的。当用户触摸引脚didSelectAnnotationView 时,我找到了该方法的实现,当我点击注释NSLog(@"Tap") ; 时它可以工作,但现在我无法更改被触摸的引脚。

非常感谢大家的贡献。

【问题讨论】:

    标签: iphone mapkit mkannotation mkannotationview


    【解决方案1】:

    要设置引脚颜色,请使用MKPinAnnotationView pinColor 属性。

    MKPinAnnotationView *pin = [[MKPinAnnotationView alloc] init]
    pin.pinColor = MKPinAnnotationColorGreen;
    

    对于自定义注释图像,设置图像属性,如下所示。

    UIImage *annImage = [UIImage imageNamed:@"AnnotationIcon.png"];
    annView.image = annImage;
    

    请注意MKPinAnnotationView animateDrop 属性不适用于自定义图像。不过有一种方法可以复制该动画。见How do I animate MKAnnotationView drop?

    更新 所以基本上,如果你想在被选中时从红色变为绿色,你可以这样做。

    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view {
        view.pinColor = MKPinAnnotationColorGreen;
    
    }
    
    - (MKAnnotationView *)mapView:(MKMapView *)aMapView
                viewForAnnotation:(id)ann {
    
        NSString *identifier = @"myPin";
        MKPinAnnotationView *annView = (MKPinAnnotationView *)
        [aMapView dequeueReusableAnnotationViewWithIdentifier:identifier];
        if (annView == nil) {
            annView= [[[MKPinAnnotationView alloc] initWithAnnotation:ann
                                                   reuseIdentifier:identifier]
                   autorelease];
        } else {
            annView.annotation = ann;
        }
    // you can define the properties here.
    
    return annView;
    }
    

    【讨论】:

    • 这是我的代码,但不起作用- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { view.annotation.pinColor = MKPinAnnotationColorGreen;
    • Xcode 告诉我:错误:语义问题:在“id”类型的对象上找不到属性“pinColor”
    • pinColor 是 MKPinAnnotationView 对象的属性,而不是 MKAnnotationView。
    • 哦,对不起,我看到了,但我不知道怎么做。我是新手,我的英语很差。我声明了这个方法: - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { NSLog(@"Annotation Tap");没关系,还是这个? - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view { NSLog(@"Annotation Tap");对不起,安东尼奥}
    • 你为什么要做 "viewPin.annotation.title =@"xxx" " 应该只是 "view.title =@"xxx" " " 确保你在 viewForAnnotation 方法中创建了 MKPinAnnotationView 而不是 MKAnnotationView我发布的内容。没关系我也是一个新手,只是我已经玩了很长一段时间的mapkit。你的英语也很好。
    【解决方案2】:

    在您的方法中设置MKAnnotationViewpinColor 属性如下:

    annotationView.pinColor = MKPinAnnotationColorRed; // Green or Purple
    

    【讨论】:

    • 这是我的代码,但不起作用 - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { view.annotation.pinColor = MKPinAnnotationColorGreen;
    • Xcode 告诉我:错误:语义问题:在“id”类型的对象上找不到属性“pinColor”
    • 你必须在你的MKAnnotationView上使用pinView - 使用view.pinColor = MKPinAnnotationColorGreen
    • 非常感谢您的贡献。再见。安东尼奥
    【解决方案3】:

    (重新)看这个:

    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view {
        view.pinColor = MKPinAnnotationColorGreen;
    
    }
    

    这是参数中的 MKPinAnnotationView(而不是 MKAnnotationView

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多