1

我想在我的 MapView 屏幕上添加一个颜色遮罩(没有坐标,我想在我的所有 mapView 上显示它)并将控件保留在这个 mapView 上。
我听说过 MKOverlay,但我不知道如何在所有地图上使用它,并且不使用坐标,因为我希望它出现在所有地图屏幕上。

有人有这个想法吗?

4

2 回答 2

3

您可以在地图视图之上叠加视图。它不应该是地图视图的子视图,而是其父视图的子视图 - 但在地图视图的前面。如果覆盖视图有一个半透明的背景颜色,我们可以看穿它。如果覆盖视图禁用了用户交互(userInteractionEnabled= NO),触摸将落入地图视图 - 好像覆盖视图不存在,这正是您想要的。换句话说,它看起来好像地图本身被半透明颜色所遮蔽。

这与地图视图或 mkoverlay 无关。您应该相应地修复您的标签。这只是一个关于用偏色或其他视觉修改覆盖任何视图的问题。

于 2012-12-02T01:15:33.453 回答
2

-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_];

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

于 2012-12-02T01:55:45.130 回答