Это сводит меня с ума. Я прошел через все сообщения в stackoveflow, но ничего не подходит для счета. Я пытаюсь добавить простую полилинию (то есть не пользовательскую накладку) в качестве наложения на мой MKMapView
. Метод viewForOverlay
на делегате никогда не вызывается. Делегат карты правильно вызывается для любой другой функции делегата. Вот код из viewForOverlay
метода:viewforoverlay никогда не набирается
//maanges the overlay
- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay{
NSLog(@"does it ask for the overlay view?");
MKOverlayView *overlayView = nil;
return overlayView;
}
Вот код, где я построить ломаную линию и добавить его к карте:
MKPolyline *thePolyline = [MKPolyline polylineWithPoints:pts count:[arrOfPoints count]];
[thePolyline setTitle:@"line"];
[mapView addOverlay:thePolyline];
Ломаных фактически имеет свой набор точек (около 1000), поэтому я не думаю, что проблема там. Не хватает ли какого-либо требуемого свойства или какой-либо другой реализации на карте?
РЕДАКТИРОВАТЬ Показывает код для полилинии MKMapPoint
генерации:
я использую файл XML с приблизительно 1100 точек для создания ломаной линии в качестве части процесса AppConfig. Я читаю и разбираю файл с NSXMLParser
и NSXMLParserDelegate
соответственно. Вот код, который генерирует точки (от метода foundCharacters
в протоколе NSXMLParserDelegate
):
//NSXMLParserDelegate methods...
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if(POINT){
NSArray *arr = [string componentsSeparatedByString:@","];
MKMapPoint pt = MKMapPointMake([[arr objectAtIndex:1]doubleValue], [[arr objectAtIndex:0]doubleValue]);
MapPointObject *thePoint = [[MapPointObject alloc] init];
thePoint.mapPoint = pt;
//gives the mkmappoint to the array of points.
[arrOfPoints addObject:thePoint];
[thePoint release];
}
}
и вот где точки на самом деле порождают MKPolyline
и передает его MAPview (от didEndElement
метода на NSXMLParserDelegate
протокола):
if([elementName isEqualToString:@"appConfig"]){
MKMapPoint *pts = malloc([arrOfPoints count] * sizeof(MKMapPoint));
for(int i = 0; i <= [arrOfPoints count] - 1; i++){
MapPointObject *pointObject = [arrOfPoints objectAtIndex:i];
pts[i] = pointObject.mapPoint;
}
MKPolyline *thePolyline = [MKPolyline polylineWithPoints:pts count:[arrOfPoints count]];
[thePolyline setTitle:@"line"];
//adding the polyline to the model's mapview
Model *theModel = [Model sharedModel];
[theModel.mapView setVisibleMapRect:thePolyline.boundingMapRect animated:YES];
[theModel.mapView addOverlay:thePolyline];
free(pts);
}
точка подсчет собственность на MKPolyline
это на самом деле говорит, что есть 1100 пунктов в нем. Значения XML образца::
EDIT
<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>
Можете ли вы показать, как 'pts' их получает? Поскольку вы используете polylineWithPoints, убедитесь, что 'pts' заполнен значениями MKMapPoint вместо значений CLLocationCoordinate2D (или вместо них используется polylineWithCoordinates). Удостоверьтесь, что 'arrOfPoints count' является именно тем, насколько велики' pts'. – Anna
@ АннаКаренина - Я думаю, что делаю это правильно, нет? Я просто разместил свой код, возможно, быстро на него набросился? Благодаря! – jdb1a1
Сохраняет ли координаты файла xml (lat, long) или MKMapPoint (они не одно и то же)? – Anna