gpt4 book ai didi

ios - Objective-C MapKit Overlay 在整个 map 上

转载 作者:可可西里 更新时间:2023-11-01 03:30:38 26 4
gpt4 key购买 nike

我将如何创建一个叠加层来为整个 map 涂上某种颜色?然后我需要能够在它上面放置注释。有任何想法吗?谢谢。

最佳答案

你要的是MKOverlayMKOverlayView .您可以在“相关示例代码”中提到的其中一个应用程序中找到苹果的代码。在上面的协议(protocol)和类引用页面中。

编辑:根据评论,之前的代码无法正常工作。这是一个MKMapDimOverlay GitHub您可以使用 CocoaPods 轻松集成的项目。我也在答案中对以下代码进行了相关更改。

为了简要说明,以下是在整个 map 上添加深色叠加层的代码。

您需要创建叠加层并将其添加到 map View 。

MKMapDimOverlay *dimOverlay = [[MKMapDimOverlay alloc] initWithMapView:MapView];
[mapView addOverlay: dimOverlay];

为特定的 MKOverlay 在 'viewForOverlay' 委托(delegate)方法中创建并返回 MKOverlayView

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay {
if([overlay isMemberOfClass:[MKMapDimOverlay class]]) {
MKMapDimOverlayView *dimOverlayView = [[MKMapDimOverlayView alloc] initWithOverlay:overlay];
return dimOverlayView;
}
}

由于您只需要覆盖 map 的彩色叠加层,因此您的叠加层和叠加 View 实现将非常简单。

DimOverlay.m

@interface DimOverlay ()
@property (nonatomic) CLLocationCoordinate2D dimOverlayCoordinates;
@end

@implementation DimOverlay

-(id)initWithMapView:(MKMapView *)mapView {
self = [super init];
if(self)
{
self.dimOverlayCoordinates = mapView.centerCoordinate;
}
return self;
}

-(CLLocationCoordinate2D)coordinate {
return self.dimOverlayCoordinates;
}

-(MKMapRect)boundingMapRect {
return MKMapRectWorld;
}

@end

DimOverlayView.m

@implementation DimOverlayView

- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)ctx {
/*
You can allow custom colors and opacity values.
Simply add UIColor and CGFloat properties in the overlay view class
and use those properties instead of the default hardcodes values below.
*/
CGContextSetAlpha(ctx, 0.85);
CGContextSetFillColorWithColor(ctx, [UIColor blackColor].CGColor);
CGContextFillRect(ctx, [self rectForMapRect:mapRect]);
}

@end

关于ios - Objective-C MapKit Overlay 在整个 map 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com