【问题标题】:How to add a transparent mask on map View [closed]如何在地图视图上添加透明蒙版 [关闭]
【发布时间】:2012-12-01 22:26:32
【问题描述】:

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

有人有这个想法吗?

【问题讨论】:

  • 您的问题实际上没有任何意义。你想做什么?
  • 你是说过滤器之类的东西?
  • @PatricioIgnacioFariaValdivi 是的,我的意思是过滤器抱歉,法语说英语听起来不太好
  • 别担心,这里是拉丁语。尝试创建一个视图,将颜色设置为您的颜色,将 alpha 设置为 0.2 并为其提供地图框。不确定地图是否可以正常工作(现在无法测试)但请尝试告诉我:)
  • 哦,添加到控制器中

标签: objective-c ios cocoa-touch mkmapview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以通过实现-hitTest:withEvent: 方法来创建过滤视图。当您触摸过滤器视图时,它将在它返回的视图上工作:

    返回包含指定点的视图层次结构(包括其自身)中接收器的最远后代。

    假设您有一个名为mapView 的MKMapView,和一个名为mapFilterView 的MapFilterView(从UIView 继承),它们都是mainView 的子视图,除了图层(mapFilterViewmapView 上) .这是一个sn-p代码,可以清楚地描述它:

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

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

    【讨论】:

    • userInteractionEnabled = 否。就这样;它将过滤器视图从命中测试方程中取出。不需要所有这些命中测试。
    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2014-11-16
    • 2013-12-05
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多