菜鸟教程小白 发表于 2022-12-13 07:27:41

ios - MKAnnotation 不显示相应的图标


                                            <p><p>我在 map 中使用自定义图标作为注释。
大约有 200 个引脚。</p>

<p>在模拟器中,我的 map 看起来像这张图片。</p>

<p> <img src="/image/16nhe.png" alt="enter image description here"/> </p>

<p>但是,在我的设备中,我的 userLocation 附近有一些红点注释。
就像下图所示。
<img src="/image/R3EcX.png" alt="enter image description here"/> </p>

<p>我猜这是由速度引起的某种运行时问题,是吗?
我该怎么做才能解决这个问题?</p>

<p>我正在使用两个类</p>

<p>ViewController.m</p>

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

<p>KMLParser.m</p>

<pre><code>- (MKAnnotationView *)viewForAnnotation:(id &lt;MKAnnotation&gt;)point
{
// Find the KMLPlacemark object that owns this point and get
// the view from it.
for (KMLPlacemark *placemark in _placemarks) {
    if ( == point)
      return ;
}
return nil;
}

- (MKAnnotationView *)annotationView
{
if (!annotationView) {
    id &lt;MKAnnotation&gt; annotation = ;
    if (annotation) {
      MKPinAnnotationView *pin =
      [ initWithAnnotation:annotation   
      reuseIdentifier:nil];
      UIImage * img = ;
      CGRect resizeRect;
      resizeRect.size.height = 40;
      resizeRect.size.width = 40;
      resizeRect.origin = (CGPoint){0.0f, 0.0f};
      UIGraphicsBeginImageContext(resizeRect.size);
      ;
      UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      pin.image = resizedImage;
      pin.canShowCallout = YES;
      pin.animatesDrop = YES;
      annotationView = pin;
    }
}
return annotationView;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>创建一个普通的<code>MKAnnotationView</code>,而不是创建一个<code>MKPinAnnotationView</code>。</p>

<p><code>MKPinAnnotationView</code> 子类倾向于忽略 <code>image</code> 属性,因为它被设计为仅显示标准的红色、绿色、紫色引脚(通过 <code>pinColor</code> 属性(property))。 </p>

<p>当您切换到 <code>MKAnnotationView</code> 时,您还必须注释掉 <code>animatesDrop</code> 行,因为该属性是特定于 <code>MKPinAnnotationView</code> 的。 </p>

<p></p><hr/>
@omz 在评论中提到的一个不会导致图像显示问题但会影响性能的单独点:<p></p>

<p><em>每次</em>您都不需要以编程方式创建重新调整大小的图像</em>需要注释 View :</p>

<ul>
<li><p>正如@omz 所说,您只需将已调整大小的图像添加到您的 bundle 中即可</p>

<pre><code>pin.image = ;
</code></pre>

<p>而不是所有那些 CG 的东西(因为你的图像基本上是一个常数)。这将是这里最好和最简单的改进。</p></li>
<li>如果您知道所有注释都将使用相同的图像,您还可以消除 <code>for</code> 循环并在此处创建并返回注释 View 。请记住,<code>for</code> 循环按原样执行<em>每次</em> mapView 都会为<em>每个</em>注解请求 View 。</li>
<li>代码看起来有点复杂,所以不清楚 <code>if (!annotationView)</code> 是否真的是 <code>YES</code>。您可能需要确认这一点,因为这似乎是您的缓存机制。</li>
<li>您也可以使用 <code>dequeueReusableAnnotationViewWithIdentifier:</code> 让 mapView 为您完成缓存,而不是自己做缓存。</li>
</ul></p>
                                   
                                                <p style="font-size: 20px;">关于ios - MKAnnotation 不显示相应的图标,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22990474/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22990474/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - MKAnnotation 不显示相应的图标