gpt4 book ai didi

ios - 自 iOS 13 起,MKPolyline 替换导致 MKTileOverlay 在 map 上闪烁

转载 作者:行者123 更新时间:2023-11-29 05:13:03 26 4
gpt4 key购买 nike

我有一个 MKMapView,它有一个 MKTileOverlay,以便我可以显示开放街道 map 图 block :

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];

我还想显示从我当前位置到库比蒂诺 Apple Park 的 MKPolyline。这条折线需要在我移动时更新,并且由于 MKPolyline 对象不可变,因此我必须删除它并为每个位置更新添加它:

- (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;
}

}

问题是,这曾经在旧版本的 iOS 中工作得很好,但自 iOS 13 以来,这导致每次删除和添加 MKPolyline 时都会重新绘制图 block :

enter image description here

这只是一个 iOS 13 错误,还是我需要在代码中修复某些内容才能避免这种情况发生?

最佳答案

据我所知,从 iOS 8 开始,我就看到了这个问题。并不总是,但有时。

此问题与两件事有关:

1) 每秒删除并再次添加折线的操作将要求 MKMapView 重新绘制折线部分,从而生成下面的 MKTileOverlay。

2) 如果图 block 的大小(以 KB 为单位,而不是分辨率)较小,则可能不存在该问题。

我能给你的最好建议是将你自己的 View 添加到 MKMapView 中,并通过调用 setNeedsDisplay 更新这个自己的 View 。它将触发绘制方法,您可以将 map 点(纬度、经度)转换为屏幕点并绘制线条。

编辑:有关 MKTileOverlay 重新加载问题的链接

https://forums.developer.apple.com/message/313677#313677

关于ios - 自 iOS 13 起,MKPolyline 替换导致 MKTileOverlay 在 map 上闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com