菜鸟教程小白 发表于 2022-12-13 00:14:32

objective-c - ios: MapView Pin 颜色注释不断变化;为什么?


                                            <p><p>您好,感谢您的帮助。</p>

<p>我正在使用以下代码在我的 MapView 注释上设置图钉颜色?</p>

<pre><code>- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id &lt;MKAnnotation&gt;)annotation {




    MKPinAnnotationView *pinView = (MKPinAnnotationView *);
    if (!pinView) {

      //////////////
      pinView = [ initWithAnnotation:annotation reuseIdentifier:@&#34;pinView&#34;];
      pinView.pinColor = MKPinAnnotationColorGreen;
      if([ isEqualToString:@&#34;MuRoom&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Mike&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Bill&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorPurple;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Steve&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Louisa&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }


      pinView.animatesDrop = YES;
      pinView.canShowCallout = YES;

      UIButton *rightButton = ;
      pinView.rightCalloutAccessoryView = rightButton;
    } else {
      pinView.annotation = annotation;
    }
    return pinView;
}


I am then using the function below to filter my pins locaions



-(void)FilterAddAll:(id)sender
{
    ;
    ;
;


//    CLLocationCoordinate2D center = mapview.centerCoordinate;
//    mapview.centerCoordinate = center;


    ;
    ;
    ;

}

-(void)FilterArt:(id)sender
{
    ;
    ;
    ;

    ;
}

-(void)FilterVenue:(id)sender
{
    ;
    ;
    ;

    ;
}
</code></pre>

<p>问题:如何让引脚颜色保持原来的颜色?在我过滤后,它们会作为随机的 pin 颜色返回。 </p>

<p>再次感谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是因为您没有正确使用“reuseIdentifier”。当您从 dequeueReusableAnnotationViewWithIdentifier:@"pinView"取回 pin 时,您需要:</p>

<p>始终设置图钉颜色,或者
为每个彩色图钉使用不同的重用标识符</p>

<p>即你可能会得到一个带有红色图钉的可重用 View ,并且你想显示一个蓝色图钉</p>

<p>示例:</p>

<pre><code>MKPinAnnotationView *pinView = (MKPinAnnotationView *);
    if (!pinView) {

      //////////////
      pinView = [ initWithAnnotation:annotation reuseIdentifier:@&#34;pinView&#34;];

      pinView.animatesDrop = YES;
      pinView.canShowCallout = YES;

      UIButton *rightButton = ;
      pinView.rightCalloutAccessoryView = rightButton;
    } else {
      pinView.annotation = annotation;
    }

// SET THE PIN COLOR REGARDLESS OF WHETHER A REUSABLE ANNOTATION WAS RETURNED OR NOT

      pinView.pinColor = MKPinAnnotationColorGreen;
      if([ isEqualToString:@&#34;MuRoom&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Mike&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorRed;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Bill&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorPurple;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Steve&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
      if([ isEqualToString:@&#34;Louisa&#39;s&#34;])
      {
            // Do somethingMKAnnotation
            pinView.pinColor = MKPinAnnotationColorGreen;

            NSLog( @&#34;data from ann index %@&#34;, annTile);
      }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - ios: MapView Pin 颜色注释不断变化;为什么?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/14106033/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/14106033/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - ios: MapView Pin 颜色注释不断变化;为什么?