如何在地图视图上添加透明蒙版

时间:2012-12-01 22:26:32

标签: objective-c ios cocoa-touch mkmapview

我想在我的MapView屏幕上添加一个颜色蒙版(没有坐标,我想在我的所有mapView上显示它)并保持对此mapView的控制。
我听说过MKOverlay,但我不知道如何将它用于所有地图而不使用坐标,因为我想在所有地图屏幕上使用它。

有人有想法吗?

2 个答案:

答案 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:

此代码只是一个示例,您最好自己测试一下。希望这会有所帮助! :)