Рисунок наложения MKMapView показывает цветовые пятна iOS 10

#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?