Так что я хочу, чтобы отобразить, где пользователь моего приложения в прошлись по MKMapView
, я собираю ДАННЫЕ со следующим кодом:MAPview viewForOverlay никогда не называли
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
// calc. distance walked
CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation];
self.totalMetters += meters;
[[self labelDistance] setText:[self formatDistanceIntoString:self.totalMetters]];
// create another annotation
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = newLocation.coordinate;
// Also add to our map so we can remove old values later
[self.locations addObject:annotation];
// Remove values if the array is too big
while (self.locations.count > 100)
{
annotation = [self.locations objectAtIndex:0];
[self.locations removeObjectAtIndex:0];
// Also remove from the map
[self.map removeAnnotation:annotation];
}
После того, как он закончил, я называю мой метод рисования:
[self drawRoute];
Который содержит следующее:
- (void)drawRoute {
NSLog(@"drawRoute");
NSInteger pointsCount = self.locations.count;
CLLocationCoordinate2D pointsToUse[pointsCount];
for(int i = 0; i < pointsCount; i++) {
MKPointAnnotation *an = [self.locations objectAtIndex:i];
pointsToUse[i] = CLLocationCoordinate2DMake(an.coordinate.latitude,an.coordinate.latitude);
}
MKPolyline *myPolyline = [MKPolyline polylineWithCoordinates:pointsToUse count:pointsCount];
[self.map addOverlay:myPolyline];
}
Наконец мой mapView
дель Egate:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
NSLog(@"route");
if ([overlay isKindOfClass:MKPolyline.class]) {
MKPolylineView *lineView = [[MKPolylineView alloc] initWithOverlay:overlay];
lineView.strokeColor = [UIColor greenColor];
return lineView;
}
return nil;
}
Очевидно мой контроллер MKMapView
Делегат соответствует
@interface NewWalkViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate>
И в mapView
в Storyboard
связан с контроллером (на выходе и делегата)
Я использую "велосипед дороги" инструмент для отладки и есть выход:
2014-01-25 20: 27: 3 0,132 Движущаяся собака [2963: 70b] новое место: 37,330435
2014-01-25 20: 27: 30,133 Движущаяся собака [2963: 70b] drawRoute
Как я могу видеть метод для рисования оверлей никогда не вызывается, и у меня нет ни малейшего понятия, как его исправить.
Вы пробовали реализации '- (MKOverlayRenderer *) MAPview: (MKMapView *) MAPview rendererForOverlay: (идентификатор < MKOverlay >) наложение;'? Начиная с iOS 7, «mapView: viewForOverlay:' [устарело] (https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapViewDelegate_Protocol/DeprecationAppendix/AppendixADeprecatedAPI.html). Боюсь, я не сделал достаточно программирования MapKit на iOS 7, чтобы помочь вам в реализации. –
В drawRoute, при настройке точек для использования [i], вы передаете широту для обоих параметров в CLLocationCoordinate2DMake. Кроме того, вы можете просто сказать «pointsToUse [i] = an.coordinate;». – Anna
@JamesFrost: спасибо, я проверил с этим делегатом – Edelweiss