有没有办法将 CI 过滤器应用于MKMapViews
?或者类似的东西?我试图不让我的基于地图的应用程序看起来如此米色。有没有办法应用RGBA
过滤器?
任何帮助/教程方向表示赞赏。我在本机文档中没有看到任何关于更改外观的内容MKMapView
。
有没有办法将 CI 过滤器应用于MKMapViews
?或者类似的东西?我试图不让我的基于地图的应用程序看起来如此米色。有没有办法应用RGBA
过滤器?
任何帮助/教程方向表示赞赏。我在本机文档中没有看到任何关于更改外观的内容MKMapView
。
我认为您无法在图像呈现到屏幕之前对其进行更改。但是,您可以在整个世界上使用 MKOverlayView 来实现相同的效果。以下应该可以工作,但将其视为伪代码只是为了让您入门。
@interface MapTileOverlay : NSObject <MKOverlay>
@end
@implementation MapTileOverlay
-(id)init {
self = [super init];
if(self) {
boundingMapRect = MKMapRectWorld;
coordinate = MKCoordinateForMapPoint(MKMapPointMake(boundingMapRect.origin.x + boundingMapRect.size.width/2, boundingMapRect.origin.y + boundingMapRect.size.height/2));
}
return self;
}
@end
@interface MapTileOverlayView : MKOverlayView
@end
@implementation MapTileOverlayView
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
CGContextSetBlendMode(context, kCGBlendModeMultiply); //check docs for other blend modes
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.5); //use whatever color to mute the beige
CGContextFillRect(context, [self rectForMapRect:mapRect]);
}
@end
您需要有一些实现MKMapViewDelegate
协议的类来创建视图......
@interface MapViewDelegate : NSObject<MKMapViewDelegate>
@end
@implementation MapViewDelegate
-(MKOverlayView*)mapView:(MKMapView*)mapView viewForOverlay:(id<MKOverlay>)overlay {
if([overlay isKindOfClass:[MapTileOverlay class]]) {
return [[MapTileOverlayView alloc] initWithOverlay:overlay];
}
return nil;
}
最后,在你初始化你的地图之后,你需要在地图上设置代理并添加覆盖......你必须在添加覆盖之前设置代理......
MapViewDelegate* delegate = [[MapViewDelegate alloc] init]; //you need to make this an iVar somewhere
[map setDelegate:delegate];
[map addOverlay:[[MapTileOverlay alloc] init]];
您可以在地图视图的顶部添加一个视图,该视图几乎是透明的,带有轻微的颜色(例如,蓝色以补偿棕色。)