菜鸟教程小白 发表于 2022-12-13 11:35:08

ios - MKMapViewDelegate : How to identifiy overlay in rendererForOverlay


                                            <p><p>我像这样将两个不同的 <code>MKGeodesicPolyline</code> 实例添加到 <code>MKMapView</code></p>

<pre><code>CLLocation *LAX = [ ...];
CLLocation *JFK = [ ...];
CLLocation *LHR = [ ...];

CLLocationCoordinate2D laxToJfkCoords = {LAX.coordinate, JFK.coordinate};
CLLocationCoordinate2D jfkToLhrCoords = {JFK.coordinate, LHR.coordinate};

MKGeodesicPolyline *laxToJfk = ;
MKGeodesicPolyline *jfkToLhr = ;

;
;
</code></pre>

<p>我想用不同的样式渲染这两个叠加层,需要在 <code>rendererForOverlay</code> 委托(delegate)方法中进行配置。</p>

<pre><code>- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id &lt;MKOverlay&gt;)overlay {
    if (!]) {
      return nil;
    }

    MKPolylineRenderer *renderer = [ initWithPolyline:(MKPolyline *)overlay];
    renderer.lineWidth = 3.0f;

    // How to set different colors for LAX-JFK and JFK-LHR?
    renderer.strokeColor = ;

    return renderer;
}
</code></pre>

<p>我的问题是在上述方法中有哪些选项可以识别两个不同的叠加层?</p>

<p>这是我到目前为止的考虑:</p>

<ol>
<li>子类化:不是一个选项,因为 <code>MKGeodesicPolyline</code> 是通过静态工厂方法初始化的。</li>
<li>在属性中保留对覆盖层的引用,然后将委托(delegate)的 <code>overlay</code> 参数与那些进行比较。这确实有效,但感觉有点笨拙。此外,对于两个以上的覆盖,需要使用 <code>NSSet</code> 或 <code>NSArray</code> 扩展此方法。</li>
</ol>

<p>还有什么我可以做的来简化这个吗? <code>MKGeodesicPolyline</code> 似乎不具备任何可用于标记的属性。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>子类化的一种替代方法是使用 <a href="http://nshipster.com/associated-objects/" rel="noreferrer noopener nofollow">associated objects</a> .但通常不鼓励使用它。</p>

<p>一个更长但更稳定的解决方案是制作一个自定义的 <code>MKOverlay</code> 和一个 <code>MKOverlayRenderer</code> 将它们的大部分实现转发到 <code>MKGeodesicPolyline< 的私有(private)实例</code> 和 <code>MKPolylineRenderer</code> 分别。然后您可以添加自定义属性来设置颜色。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - MKMapViewDelegate : How to identifiy overlay in rendererForOverlay,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/32348942/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/32348942/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - MKMapViewDelegate : How to identifiy overlay in rendererForOverlay