В моем приложении есть MKMapView, и я хочу, чтобы пользователь мог переключать тип карты, чтобы он мог быть MutedStandard, Standard, Satellite или Hybrid. Я подключил UISegmentedControl к контроллеру представления карты, чтобы изменить типы карты. Проблема в том, что, когда я пытаюсь переключаться между MutedStandard и Standard (или наоборот), вид карты никогда не обновляется! Он отлично работает при любом другом изменении типа ... и работает, если я завершаю работу и перезагружаю приложение, но изменение типа карты в реальном времени никогда не срабатывает, если оно просто между MutedStandard и Standard.
Другая странная вещь в том, что он отлично работает на iOS12 ... только не на iOS13.
Вот простой код, который обрабатывает это:
- (IBAction) updateMapTypeSegmentControlValueChanged:(id)sender {
[[NSUserDefaults standardUserDefaults] setInteger:self.segmentMapType.selectedSegmentIndex forKey:MapViewSettingsDisplayType];
[self updateMapDisplayType];
}
- (void) updateMapDisplayType {
NSUInteger mapType = [[NSUserDefaults standardUserDefaults] integerForKey: MapViewSettingsDisplayType];
switch (mapType) {
case 0:
{
NSLog(@"MapView: updateMapDisplayType - setting to Muted");
self.mapView.mapType = MKMapTypeMutedStandard;
break;
}
case 1:
{
NSLog(@"MapView: updateMapDisplayType - setting to Standard");
self.mapView.mapType = MKMapTypeStandard;
break;
}
case 2:
{
NSLog(@"MapView: updateMapDisplayType - setting to Satellite");
self.mapView.mapType = MKMapTypeSatellite;
break;
}
case 3:
{
NSLog(@"MapView: updateMapDisplayType - setting to Hybrid");
self.mapView.mapType = MKMapTypeHybrid;
break;
}
default:
{
self.mapView.mapType = MKMapTypeMutedStandard;
break;
}
}
}
Любые идеи о том, что я могу попытаться сделать эту работу? Я попытался использовать dispatch_after, чтобы заставить его изменить тип через 1 секунду, но это не сработало. Ни один не звонил [mapView setNeedsDisplay]