MKPolyline replacement causes MKTileOverlay to flash on map since iOS 13

I have an

MKMapView
that has a
MKTileOverlay
so that I can show Open Street Map tiles:


NSString *templateURL = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
self.tileOverlay = [[MKTileOverlay alloc] initWithURLTemplate:templateURL];
self.tileOverlay.canReplaceMapContent = YES;
[self.mapView addOverlay:self.tileOverlay level:MKOverlayLevelAboveLabels];


I also want to show an

MKPolyline
from my current location to Apple Park in Cupertino. This polyline needs to be updated as I move, and since an
MKPolyline
object isn't mutable, I have to remove it and add it for each location update:


- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations {

  self.currentLocation = userLocation;

  // Update polyline
  CLLocationCoordinate2D applePark = CLLocationCoordinate2DMake(37.334626, -122.008895);
  [self buildPolylineWithDestinationLocation:applePark];

}

- (void)buildPolylineWithDestinationLocation:(CLLocationCoordinate2D)coordinate {

  // Remove the polyline each time so we can redraw it
  if (self.polylineApple) {
  [self.mapView removeOverlay:self.polylineApple];
  }

  // Get current location
  CLLocation *location = self.currentLocation;
  CLLocationCoordinate2D currentLocation = location.coordinate;
  CLLocationCoordinate2D points[2];
  points[0] = currentLocation;
  points[1] = coordinate;

  // Remove all route polylines
  MKPolyline *oldPolyline = self.polylineApple;

  // Draw a line
  self.polylineApple = [MKPolyline polylineWithCoordinates:points count:2];

  [self.mapView addOverlay:self.polylineApple];
  if (oldPolyline) {
  [self.mapView removeOverlay:oldPolyline];
  oldPolyline = nil;
  }

}


The problem is, this used to work great in older versions of iOS, but ever since iOS 13 this has caused the tiles to be redrawn each time that

MKPolyline
is removed and added. See:


https://i.stack.imgur.com/9nJEO.gif


Is this just an iOS 13 bug, or is there something I need to fix in my code to make this not happen?

It is a bug. Please read this other thread:

https://forums.developer.apple.com/thread/125631

MKPolyline replacement causes MKTileOverlay to flash on map since iOS 13
 
 
Q