如何在iOS7中以编程方式将地图颜色从白天切换到夜晚

6

我正在开发一个iOS 7的应用程序,并尝试将地图从白天模式切换到夜晚模式,或者从夜晚模式切换到白天模式。在iOS 7文档中,我没有找到相关的API来实现这个功能。


我相信这是自动化的事情。如果有人回应以编程方式完成此操作,我会很感兴趣。 - John Riselvato
我在我的应用程序中使用UIMapKit。当我在晚上测试时,我没有看到地图自动更改模式。你认为这是一个自动的事情吗? - user2001457
在测试版中,这是自动的。看起来苹果可能已经删除了这个功能...http://forums.imore.com/ios-7/262271-just-me-there-no-night-mode-apple-maps-final-release-ios-7-a.html - John Riselvato
@JohnRiselvato 只有在导航模式下才会切换到夜间模式。 - Léo Natan
1个回答

2
这不是MKMapKit的内置功能,所以如果没有自己实现,你所要求的是不可能的。如果你要自己实现,最好的方式就是找到一组“夜间模式”的地图瓦片源,然后使用MKTileOverlay类(iOS 7中新增)完全替换地图内容。
以下是使用Open Street Map瓦片源(非夜间模式)的简短代码示例:
// Put this in your -viewDidLoad method
NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template];

//This is the important bit, it tells your map to replace ALL the content, not just overlay the tiles.
overlay.canReplaceMapContent = YES;
[self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];

然后实现下面的mapView代理方法...
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
    if ([overlay isKindOfClass:[MKTileOverlay class]]) {
        return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
    }
}

完整参考文档请查看https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKTileOverlay_class/Reference/Reference.html

此链接为苹果官方提供的MKTileOverlay类的参考文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接