iOS:在MKMapView上,无法在MKMapTypeStandard和MKMapTypeMutedStandard类型之间切换

问题描述 投票:0回答:1

我在我的应用程序中有一个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 ...

ios mapkit mkmapview
1个回答
0
投票

看来您不必退出,但是如果您完全移动地图,就会看到从静音到标准的转变(反之亦然。)>

您可以执行多种操作来触发重新绘制。例如,如果您使用的是物理设备,并且使用userTrackingMode中的userTrackingMode(在Swift中为MKUserTrackingModeFollow),则可能会看到其更新速度相当快。或者,我发现如果将其更改为Satellite并立即更改为“静音/标准”,您会看到更改。甚至更简单,只需设置MKUserTrackingModeFollow(甚至将其设置为当前值),您就会看到更改:

© www.soinside.com 2019 - 2024. All rights reserved.