我在我的应用程序中有一个MKMapView,我希望用户能够切换地图类型,因此它可以是MutedStandard,Standard,Satellite或Hybrid。我已经在Map视图控制器上连接了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]
我在我的应用程序中有一个MKMapView,我希望用户能够切换地图类型,因此它可以是MutedStandard,Standard,Satellite或Hybrid。我在地图上挂了一个UISegmentedControl ...
看来您不必退出,但是如果您完全移动地图,就会看到从静音到标准的转变(反之亦然。)>
您可以执行多种操作来触发重新绘制。例如,如果您使用的是物理设备,并且使用userTrackingMode
中的userTrackingMode
(在Swift中为MKUserTrackingModeFollow
),则可能会看到其更新速度相当快。或者,我发现如果将其更改为Satellite并立即更改为“静音/标准”,您会看到更改。甚至更简单,只需设置MKUserTrackingModeFollow
(甚至将其设置为当前值),您就会看到更改: