#ios #objective-c #iphone #mkmapview #ios10
#iOS #objective-c #iPhone #mkmapview #ios10
Вопрос:
Я рисую MKPolyline поверх MKMapView. До iOS 10 все работало нормально. В iOS 10 отображаются цветовые пятна, отличные от маршрутов.
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
[![enter image description here][1]][1]if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolyline *route = overlay;
@try {
MKPolylineRenderer *routeRenderer = [[MKPolylineRenderer alloc] initWithPolyline:route];
routeRenderer.strokeColor = [UIColor colorWithRed:20/255.0 green:153/255.0 blue:255/255.0 alpha:1.0];
routeRenderer.lineWidth = 3;
[routeRenderer setNeedsDisplay];
return routeRenderer;
}
@catch (NSException *exception) {
NSLog(@"exception :%@",exception.debugDescription);
}
}
else return nil;
}
Ответ №1:
Это похоже на ошибку iOS 10, я трачу много времени, чтобы «взломать» эту ошибку.
Я нашел только одно решение, когда я перерисовываю MKPolyline (удаляю старую и добавляю новую), это должно быть вызвано в dispatch_after, похоже, что его нужно перерисовать, когда карта создает форму. (имхо)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
// Add MKPolyline to mapView
});
Я тоже перерисовываю MKPolyline при вызове делегата MapView
- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
Требуется больше тестов, но, похоже, это работает
Комментарии:
1. Хорошо, приятель, спасибо за твой ответ. я проверю и дам вам знать
Ответ №2:
Я столкнулся с той же проблемой, что решило мою проблему, так это то, что код, добавляющий наложения, был вызван из viewDidLoad . Как только я переместил код в viewDidAppear, проблема была решена.
Комментарии:
1. что ж… этого было недостаточно.
2. Мне пришлось расширить MKPolylineRenderer и перезаписать -(BOOL) canDrawMapRect:(MKMapRect)mapRect Масштабирование:(MKZoomScale)Масштабирование, чтобы всегда возвращать YES .
3. Вы решили проблему, установив логическое значение в YES?