ios - viewforoverlay 永远不会被调用
<p><p>这让我发疯了。我已经浏览了 stackoveflow 上的所有帖子,但没有任何内容符合要求。我正在尝试添加一个简单的折线(即不是自定义叠加)作为我的 <code>MKMapView</code> 的叠加。委托(delegate)上的 <code>viewForOverlay</code> 方法永远不会被调用。 map 委托(delegate)被正确地为所有其他委托(delegate)函数调用。以下是 <code>viewForOverlay</code> 方法的代码:</p>
<pre><code>//maanges the overlay
- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay{
NSLog(@"does it ask for the overlay view?");
MKOverlayView *overlayView = nil;
return overlayView;
}
</code></pre>
<p>这是我构造折线并将其添加到 map 的代码:</p>
<pre><code> MKPolyline *thePolyline = ];
;
;
</code></pre>
<p>实际上,折线确实有我的点集合(大约 1000 个),所以我认为问题不存在。我是否缺少 mapView 上的某些必需属性或其他一些实现?</p>
<p><strong>EDIT</strong> 显示折线 <code>MKMapPoint</code> 生成的代码:</p>
<p>我使用一个包含大约 1100 个点的 xml 文件来生成折线,作为 appConfig 过程的一部分。我分别使用 <code>NSXMLParser</code> 和 <code>NSXMLParserDelegate</code> 读取和解析文件。下面是生成点的代码(来自 <code>NSXMLParserDelegate</code> 协议(protocol)中的 <code>foundCharacters</code> 方法):</p>
<pre><code>//NSXMLParserDelegate methods...
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if(POINT){
NSArray *arr = ;
MKMapPoint pt = MKMapPointMake([doubleValue], [doubleValue]);
MapPointObject *thePoint = [ init];
thePoint.mapPoint = pt;
//gives the mkmappoint to the array of points.
;
;
}
}
</code></pre>
<p>这里是点实际生成 <code>MKPolyline</code> 并将其提供给 mapView 的位置
(来自 <code>NSXMLParserDelegate</code> 协议(protocol)上的 <code>didEndElement</code> 方法):</p>
<pre><code> if(){
MKMapPoint *pts = malloc( * sizeof(MKMapPoint));
for(int i = 0; i <= - 1; i++){
MapPointObject *pointObject = ;
pts = pointObject.mapPoint;
}
MKPolyline *thePolyline = ];
;
//adding the polyline to the model's mapview
Model *theModel = ;
;
;
free(pts);
}
</code></pre>
<p><code>MKPolyline</code> 上的点数属性实际上表示其中有 1100 个点。 </p>
<p><strong>编辑:</strong>示例 XML 值:</p>
<pre><code><appConfig>
<point>-94.847587,38.977967</point>
<point>-94.844111,38.977978</point>
<point>-94.844108,38.977369</point>
<point>-94.844003,38.977369</point>
<point>-94.843955,38.974886</point>
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>xml 文件包含坐标(纬度和经度)值。这些坐标值与 <code>MKMapPoint</code> 值( mapView 的纬度/经度在平面 map 上的 x,y 投影)不同。</p>
<p>你应该存储坐标而不是 <code>MKMapPoint</code> 值(你是)。</p>
<p>所以不要使用 <code>MKMapPoint</code> 和 <code>polylineWithPoints</code>,而是使用 <code>CLLocationCoordinate2D</code> 和 <code>polylineWithCoordinates</code>。</p>
<p>在xml解析器方法中,使用<code>CLLocationCoordinate2DMake</code>创建并存储一个<code>CLLocationCoordinate2D</code>。</p>
<p><code>pts</code> 数组的类型应该是 <code>CLLocationCoordinate2D *</code> 并且在执行 <code>malloc</code> 时,使用 <code>sizeof(CLLocationCoordinate2D)</code>.</p>
<p>然后调用 <code>polylineWithCoordinates</code> 而不是 <code>polylineWithPoints</code>。</p>
<p><br/>
顺便说一句,在进行上述更改后,您还需要在 <code>viewForOverlay</code> 中实际返回一个非零覆盖 View ,否则您仍然看不到该行:</p>
<pre><code>MKPolylineView *polylineView = [[ initWithPolyline:overlay] autorelease];
polylineView.strokeColor = ;
polylineView.lineWidth = 2.0;
return polylineView;
</code></pre></p>
<p style="font-size: 20px;">关于ios - viewforoverlay 永远不会被调用,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/10823257/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/10823257/
</a>
</p>
页:
[1]