我想在我的 MapView 屏幕上添加一个颜色遮罩(没有坐标,我想在我的所有 mapView 上显示它)并将控件保留在这个 mapView 上。
我听说过 MKOverlay,但我不知道如何在所有地图上使用它,并且不使用坐标,因为我希望它出现在所有地图屏幕上。
有人有这个想法吗?
我想在我的 MapView 屏幕上添加一个颜色遮罩(没有坐标,我想在我的所有 mapView 上显示它)并将控件保留在这个 mapView 上。
我听说过 MKOverlay,但我不知道如何在所有地图上使用它,并且不使用坐标,因为我希望它出现在所有地图屏幕上。
有人有这个想法吗?
您可以在地图视图之上叠加视图。它不应该是地图视图的子视图,而是其父视图的子视图 - 但在地图视图的前面。如果覆盖视图有一个半透明的背景颜色,我们可以看穿它。如果覆盖视图禁用了用户交互(userInteractionEnabled
= NO),触摸将落入地图视图 - 好像覆盖视图不存在,这正是您想要的。换句话说,它看起来好像地图本身被半透明颜色所遮蔽。
这与地图视图或 mkoverlay 无关。您应该相应地修复您的标签。这只是一个关于用偏色或其他视觉修改覆盖任何视图的问题。
-hitTest:withEvent:
您可以通过实现该方法来创建过滤器视图。当您触摸过滤器视图时,它将在它返回的视图上工作:
返回包含指定点的视图层次结构(包括其自身)中接收器的最远后代。
假设您有一个名为 的 MKMapViewmapView
和一个名为 的 MapFilterView(从 UIView 子类化)mapFilterView
,它们都是 的子视图mainView
,除了图层(mapFilterView
在上mapView
)。这是一段代码,可以清楚地描述它:
MapFilterView.h
...
@interface MapFilterView : UIView {
MKMapView * mapView_;
}
@property (nonatomic, retain) MKMapView * mapView;
@end
MapFilterView.m
#import "MapFilterView.h"
@implementation MapFilterView
@synthesize mapView = mapView_;
- (void)dealloc {
self.mapView = nil;
[super dealloc];
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView * child = [super hitTest:point withEvent:event];
if (child == self)
return mapView_;
return child;
}
在您的主视图控制器中(假设在 中-viewDidLoad:
):
// Create the map view
...
[self.view addSubview:self.mapView];
// Create the map filter view
mapFilterView_ = [[MapFilterView alloc] initWithFrame:mapFilterViewFrame];
mapFilterView_.mapView = self.mapView;
[self.view addSubview:mapFilterView_];
这段代码只是一个示例,您最好自己测试一下。希望这会有所帮助!:)