我想在我的MapView屏幕上添加一个颜色蒙版(没有坐标,我想在我的所有mapView上显示它)并保持对此mapView的控制。
我听说过MKOverlay,但我不知道如何将它用于所有地图而不使用坐标,因为我想在所有地图屏幕上使用它。
有人有想法吗?
答案 0 :(得分:3)
您可以在地图视图顶部叠加视图。它不应该是地图视图的子视图,而是它的超级视图 - 但是在地图视图的前面。如果叠加视图具有半透明的背景颜色,我们可以看穿它。如果叠加视图禁用了用户互动(userInteractionEnabled
=否),则触摸将落入地图视图 - 就像叠加视图不在那里一样,这正是您想要的。换句话说,它看起来好像地图本身被半透明的颜色着色。
这与地图视图或mkoverlay无关。您应该相应地修复您的标签。这只是一个关于使用偏色或其他视觉修改覆盖任何视图的问题。
答案 1 :(得分:2)
您可以使用-hitTest:withEvent:
方法创建过滤器视图。当您触摸过滤器视图时,它将在它返回的视图上运行:
返回包含指定点的视图层次结构(包括其自身)中接收器的最远后代。
假设您有一个名为mapView
的MKMapView和一个名为mapFilterView
的MapFilterView(来自UIView的子类),它们都是mainView
的子视图,除了图层({{1在} mapFilterView
)上。这是一段代码,可以清楚地描述:
MapFilterView.h
mapView
MapFilterView.m
...
@interface MapFilterView : UIView {
MKMapView * mapView_;
}
@property (nonatomic, retain) MKMapView * mapView;
@end
在主视图控制器中(假设在#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:
此代码只是一个示例,您最好自己测试一下。希望这会有所帮助! :)