首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKPinAnnotationView颜色不起作用

MKPinAnnotationView颜色不起作用
EN

Stack Overflow用户
提问于 2014-03-02 11:50:02
回答 1查看 771关注 0票数 1

我试图展示一些引脚从一个数组,它显示了他们全部,但他们是红色,而不是绿色,我要求他们是。

那是为什么?

代码语言:javascript
复制
 //run on array to get all locations
for(int k=0;k<[array count];k=k+2)
{

        float targetlat=[[array objectAtIndex:k] floatValue];
        float targetlongi=[[array objectAtIndex:k+1] floatValue];
        CLLocationCoordinate2D location =  CLLocationCoordinate2DMake(targetlat,targetlongi);
        NSString *partyTitle = @"title";
        MKPinAnnotationView *partyPin = [self returnPointView:location andTitle:partyTitle andColor:MKPinAnnotationColorGreen];
        [self.mapView addAnnotation:partyPin.annotation];

}

   //function callback is working but its red, and it takes so much time to load
-(MKPinAnnotationView*) returnPointView: (CLLocationCoordinate2D) location andTitle: (NSString*) title andColor: (int) color
{


    MKCoordinateRegion region = self.mapView.region;
    region.center = location;
    region.span.longitudeDelta /= 5.0;
    region.span.latitudeDelta /= 5.0;
    [self.mapView setRegion:region];

    MKPointAnnotation *resultPin = [[MKPointAnnotation alloc] init];
    MKPinAnnotationView *result = [[MKPinAnnotationView alloc] initWithAnnotation:resultPin reuseIdentifier:Nil];
    [resultPin setCoordinate:location];
    resultPin.title = title;
    result.pinColor = color;
    return result;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-02 15:21:36

关于引脚是红色而不是绿色的主要问题:

代码创建了一个MKPinAnnotationView,但是这个视图从来没有给出过映射视图。

要使地图视图使用您创建的注释视图,viewForAnnotation必须实现委托方法,并从那里返回

否则,map视图不了解您创建的注释视图。

如果不实现viewForAnnotation,则映射视图将创建默认的红色引脚视图。

关于第二个问题,即“加载它需要那么多时间”:

最有可能的原因是每次添加注释时都要调用setRegion

如果要添加500个注释,则地图视图将该区域设置500次。

请注意,setRegion 不需要简单地调用来添加注释(不管当前可见区域如何)。注释的坐标不必是“可见的”才能添加注释。

for循环中,您想要做的只是构造一个包含所有注释的区域,然后在添加所有注释之后(在for循环之后)调用setRegion (或setVisibleRect)。构建MKMapRect和调用setVisibleMapRect比为了调用setRegion而构造MKCoordinateRegion更容易。

在iOS 7中,这甚至更简单:只需调用showAnnotations (不需要人工构造)。

示例:

代码语言:javascript
复制
//Initialize the MKMapRect (region) we want to show to null...
MKMapRect showMapRect = MKMapRectNull;

for(int k=0;k<[array count];k=k+2)
{
    float targetlat=[[array objectAtIndex:k] floatValue];
    float targetlongi=[[array objectAtIndex:k+1] floatValue];
    CLLocationCoordinate2D location =  CLLocationCoordinate2DMake(targetlat,targetlongi);
    NSString *partyTitle = @"title";

    //Here, don't create the annotation view.
    //Just create the annotation...
    MKPointAnnotation *resultPin = [[MKPointAnnotation alloc] init];
    [resultPin setCoordinate:location];
    resultPin.title = partyTitle;
    [self.mapView addAnnotation:resultPin];

    //Add this annotation's coordinate
    //to the MKMapRect we want to show...
    MKMapPoint annMapPoint = MKMapPointForCoordinate(location);
    MKMapRect annMapRect = MKMapRectMake(annMapPoint.x, annMapPoint.y, 0, 0);
    showMapRect = MKMapRectUnion(showMapRect, annMapRect);
}

mapView.visibleMapRect = showMapRect;

//In iOS 7, instead of constructing MKMapRect manually,
//we could just call showAnnotations...
//[mapView showAnnotations:mapView.annotations animated:YES];


//Implement the viewForAnnotation delegate method...
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    //if annotation is the user location,
    //return nil so map view shows default view for it (blue dot)...
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        return nil;
    }

    static NSString *reuseId = @"pin";
    MKPinAnnotationView *pav = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
    if (pav == nil)
    {
        pav = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
        pav.canShowCallout = YES;
        pav.animatesDrop = YES;
        pav.pinColor = MKPinAnnotationColorGreen;
    }
    else
    {
        pav.annotation = annotation;
    }

    return pav;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22127157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档