ios - 删除用户位置注释上的选择图像
<p><p>我有以下代码:</p>
<pre><code>- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotation{
annotation.image = ;
}
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)annotation{
annotation.image = ;
}
</code></pre>
<p>但是,当我选择用户位置时,会出现图钉图标。如何将用户位置的选择注释设置为无效,但为所有其他注释启用?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>在委托(delegate)方法中,您可以检查所选注解是否为 <code>MKUserLocation</code> 类型,如果是,则不要更改图像。</p>
<p><code>MKUserLocation</code> 是用户位置注释的文档类。</p>
<p>在这些委托(delegate)方法中,第二个参数是 <code>MKAnnotationView</code>。<br/>
该类具有属性<code>annotation</code>,它指向 View 所针对的底层注释模型对象。检查 <code>annotation</code> 属性的类型。</p>
<p>例如:</p>
<pre><code>- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotation{
if (])
{
//it's the user location, do nothing
return;
}
annotation.image = ;
}
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)annotation{
if (])
{
//it's the user location, do nothing
return;
}
annotation.image = ;
}
</code></pre>
<p>另外两个建议:</p>
<ol>
<li><p>不要在这些委托(delegate)方法中将参数命名为<code>annotation</code>。使用与文档中建议的名称相同的名称,即 <code>view</code>,因为这是参数的真正含义。它是注解的 <em>view</em> 对象——而不是注解 <em>model</em> 对象本身。这将使委托(delegate)方法中的代码不那么困惑。</p>
<p>所以将 <code>(MKAnnotationView *)annotation</code> 更改为 <code>(MKAnnotationView *)view</code> 并且检查变为 <code>if (] )</code>.</p>
</li>
<li><p>理想情况下,您应该在调用这些委托(delegate)方法以及更改 View 上的图像时将“选定”状态存储在注释模型对象中。然后,在 <code>viewForAnnotation</code> 中,代码应该检查注解的状态,并使用与委托(delegate)方法相同的逻辑在其中设置图像(不同的图像取决于它是否“被选中”)否则,可能会发生什么是选择注释后,如果用户缩放/平移 map ,图像可能会恢复到 <code>viewForAnnotation</code> 中指定的值。</p>
</li>
</ol></p>
<p style="font-size: 20px;">关于ios - 删除用户位置注释上的选择图像,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/23400976/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/23400976/
</a>
</p>
页:
[1]