【问题标题】:MKPinAnnotationView pinColorMKPinAnnotationView pin颜色
【发布时间】:2012-11-07 20:37:24
【问题描述】:

我无法弄清楚为什么与 MKPointAnnotation 关联(理论上)的 MKPinAnnotationView 没有出现在地图上。事实上,图钉出现了,但它不是应有的紫色......

代码如下:

MKPointAnnotation *myPersonalAnnotation= [[MKPointAnnotation alloc]init];
myPersonalAnnotation.title= [appDelegate.theDictionary objectForKey:@"theKey"];
myPersonalAnnotation.coordinate=CLLocationCoordinate2DMake(6.14, 10.7);
MKPinAnnotationView *myPersonalView=[[MKPinAnnotationView alloc] initWithAnnotation:myPersonalAnnotation reuseIdentifier:@"hello"];
myPersonalView.pinColor=MKPinAnnotationColorPurple;
[myMap addAnnotation:myPersonalAnnotation];

【问题讨论】:

    标签: ios mapkit mkpinannotationview


    【解决方案1】:

    如果你想创建一个不同于默认红色图钉的注解视图,你必须在地图视图的viewForAnnotation委托方法中创建并返回它。

    只要地图需要显示一些注释(内置用户位置或您添加的注释),地图就会自动调用 viewForAnnotation 委托方法。

    从调用addAnnotation 之前删除myPersonalView 的本地创建,并改为实现viewForAnnotation 方法。

    例如:

    //in your current method...
    MKPointAnnotation *myPersonalAnnotation= [[MKPointAnnotation alloc]init];
    myPersonalAnnotation.title= [appDelegate.theDictionary objectForKey:@"theKey"];
    myPersonalAnnotation.coordinate=CLLocationCoordinate2DMake(6.14, 10.7);
    [myMap addAnnotation:myPersonalAnnotation];
    
    //...
    
    //add the viewForAnnotation delegate method...
    -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
    {
        //if annotation is the user location, return nil to get default blue-dot...
        if ([annotation isKindOfClass:[MKUserLocation class]])
            return nil;
    
        //create purple pin view for all other annotations...
        static NSString *reuseId = @"hello";
    
        MKPinAnnotationView *myPersonalView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
        if (myPersonalView == nil)
        {
            myPersonalView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
            myPersonalView.pinColor = MKPinAnnotationColorPurple;
            myPersonalView.canShowCallout = YES;
        }
        else
        {
            //if re-using view from another annotation, point view to current annotation...
            myPersonalView.annotation = annotation;
        }
    
        return myPersonalView;
    }
    


    确保地图视图的 delegate 属性已设置,否则不会调用委托方法。
    在代码中,使用myMap.delegate = self;(例如viewDidLoad)或者如果myMapIBOutlet,则在Interface Builder 中建立连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多