1 Reply
      Latest reply on Jan 16, 2020 1:18 PM by vmalonso
      zedsaid Level 1 Level 1 (0 points)

        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?