2012-12-01 51 views
1

我想在我的MapView屏幕上添加一個顏色遮罩(沒有座標,我想將其顯示在我的所有mapView上),並將控件保留在此mapView上。
我聽說過MKOverlay,但我不知道如何使用它的所有地圖,並沒有使用座標因爲我希望它在所有的地圖屏幕上。如何在地圖上添加透明遮罩查看

是否有人有想法?

+0

你的問題實際上沒有任何意義。你想做什麼? –

+2

你的意思是像一個過濾器? – Vertig0

+0

@PatricioIgnacioFariaValdivi是的,我的意思是過濾器 對不起,法語試圖說英語聽起來不是很好 – james075

回答

2

您可以使用-hitTest:withEvent:方法創建過濾器視圖。當您觸摸過濾器視圖時,它將在它返回的視圖上起作用:

返回包含指定點的視圖層次結構(包括其自身)中接收器的最遠後代。

假設你一個名爲的MKMapView mapView和MapFilterView(從UIView的子類)被稱爲mapFilterView,他們兩人都是mainView子視圖,除了層(mapFilterViewmapView)。這裏有一個片斷代碼,將描述清楚:

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

此代碼只是一個示例,您最好自己測試一下。希望這會有所幫助! :)

+1

userInteractionEnabled = NO。就這樣;它將過濾器視圖從命中測試方程中移出。不需要所有這些命中測試。 – matt

+0

@matt好點!謝謝! – Kjuly

+0

謝謝大家! – james075

3

您可以覆蓋地圖視圖頂部的視圖。它不應該是地圖視圖的子視圖,而應該是其超級視圖的子視圖 - 但在地圖視圖的前方。如果疊加視圖具有半透明背景顏色,我們可以看穿它。如果疊加層視圖禁用了用戶交互(userInteractionEnabled = NO),則觸摸將進入地圖視圖 - 就好像覆蓋視圖不存在一樣,這正是您所期望的。換句話說,它看起來好像地圖本身被半透明的顏色遮住了。

這與地圖視圖或mkoverlay無關。你應該相應地修復你的標籤。這只是一個關於用色偏或其他視覺修改來覆蓋任何視圖的問題。

相關問題