MKPinAnnotationView 红色图钉替换为图片

Posted

技术标签:

【中文标题】MKPinAnnotationView 红色图钉替换为图片【英文标题】:MKPinAnnotationView red pin is replaced with image 【发布时间】:2013-01-03 04:30:12 【问题描述】:

我已将MKPinAnnotationView 红色别针替换为图片

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation  

MKAnnotationView *annotationView=[mapView dequeueReusableAnnotationViewWithIdentifier:parkingAnnotationIdentifier];
//If one isn’t available, create a new one
if(!annotationView)
annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:parkingAnnotationIdentifier];
//Here’s where the magic happens
annotationView.image=[UIImage imageNamed:@"dot.png"];

return annotationView;

现在我有一个详细信息披露,当我单击任何按钮时,它将转到该注释的详细页面。

到这里还好。现在的问题是,当我从详细信息页面再次返回地图视图时,会出现默认的红色图钉而不是 dot.png,因为当第一次加载视图时-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id &lt;MKAnnotation&gt;)annotation 这个方法被调用了,但是当我们从详细页面视图返回时会出现没有被调用。如何解决这个问题?

if ([list_array count]>0) 
        location1.latitude = [[[list_array objectAtIndex:0]valueForKey:@"latitude"]floatValue];
        location1.longitude = [[[list_array objectAtIndex:0]valueForKey:@"longitude"]floatValue];
        region.center = location1;

        if ([[list_array objectAtIndex:0]valueForKey:@"company_id"]) 
            for (int i=0; i<[list_array count]; i++) 
            
                CLLocationCoordinate2D location1;
                location1.latitude = [[[list_array objectAtIndex:i]valueForKey:@"latitude"]floatValue];
                location1.longitude = [[[list_array objectAtIndex:i]valueForKey:@"longitude"]floatValue];
                region.span = span;

                BasicMapAnnotation *addAnnotation1 = [[BasicMapAnnotation alloc] initWithLatitude:location1.latitude andLongitude:location1.longitude] ; 
                addAnnotation1.tag = i;
                [mapView addAnnotation:addAnnotation1];
            
        
    

    [mapView setRegion:region animated:TRUE];
    [mapView regionThatFits:region];
    //[self.view addSubview:self.mapView];

【问题讨论】:

【参考方案1】:

只需在 viewWillAppear:viewDidAppear: 方法中添加整个引脚或 setRegion

当我们在MKMapViewaddAnnotation 时再次调用viewForAnnotation,所以只需调用它或使用setRegionsetRegion 方法刷新它MKMapView

或者只是删除这些整个引脚并再次添加viewDidAppear:,如下所示......

-(void)viewDidAppear:(BOOL)animated

    NSArray *existingpoints = mapView.annotations;
    if ([existingpoints count] > 0)
        [mapView removeAnnotations:existingpoints];

    if ([[list_array objectAtIndex:0]valueForKey:@"company_id"]) 
   for (int i=0; i<[list_array count]; i++) 
   
    CLLocationCoordinate2D location1;
    location1.latitude = [[[list_array objectAtIndex:i]valueForKey:@"latitude"]floatValue];
    location1.longitude = [[[list_array objectAtIndex:i]valueForKey:@"longitude"]floatValue];
    region.span = span;

    BasicMapAnnotation *addAnnotation1 = [[BasicMapAnnotation alloc] initWithLatitude:location1.latitude andLongitude:location1.longitude] ; 
    addAnnotation1.tag = i;
    [mapView addAnnotation:addAnnotation1];
    

   [mapView setRegion:region animated:TRUE];
   [mapView regionThatFits:region];

希望对你有帮助...

【讨论】:

它没有被称为先生......我保留了 [mapView setRegion:region animated:YES]; 好的,但现在我只是给出必须完全正常工作的逻辑,只需删除整个注释(引脚)并在 viewDidLoad 方法中再次添加这些整个引脚.. 等待我会更新答案.. 只需将添加注释的代码发布到您使用该代码的方法中 是的,6 个月前...然后我改变主意,添加图片代替图钉。 @Vishal ohhh 来自旁遮普邦??哇,兄弟,我喜欢那种状态,也喜欢人 yaar bahot hi pyare log aur bahot a6e hote he yaar waha k log .. nice .. :)

以上是关于MKPinAnnotationView 红色图钉替换为图片的主要内容,如果未能解决你的问题,请参考以下文章

MKPinAnnotationView - 不同引脚的不同动作

MKPinAnnotationView 子类上未调用 drawRect

可拖动的 MKPinAnnotationView 不起作用。 draggable = YES,callout有title和subtitle,setCoordinate实现

为啥 MKMapView 不显示当前位置红色图钉?

用户位置(蓝点)不断变成红色图钉

自定义 MKPinAnnotationView 颜色