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
<MKAnnotation>)annotation
{
return ;
}
</code></pre>
<p>KMLParser.m</p>
<pre><code>- (MKAnnotationView *)viewForAnnotation:(id <MKAnnotation>)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 <MKAnnotation> 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]