MapView画面にカラーマスクを追加し(座標なしで、すべてのmapViewに表示したい)、このmapViewのコントロールを維持したい。
MKOverlayについて聞いたことがありますが、すべてのマップでMKOverlayを使用する方法がわかりません。また、座標を使用せずに、すべてのマップ画面でMKOverlayが必要です。
誰かがその考えを持っていますか?
MapView画面にカラーマスクを追加し(座標なしで、すべてのmapViewに表示したい)、このmapViewのコントロールを維持したい。
MKOverlayについて聞いたことがありますが、すべてのマップでMKOverlayを使用する方法がわかりません。また、座標を使用せずに、すべてのマップ画面でMKOverlayが必要です。
誰かがその考えを持っていますか?
マップ ビューの上にビューを重ねることができます。これは、マップ ビューのサブビューではなく、そのスーパービューのサブビューである必要がありますが、マップ ビューの前にあります。オーバーレイ ビューの背景色が半透明の場合、透けて見えます。オーバーレイ ビューでユーザー インタラクションが無効になっている場合 ( userInteractionEnabled
= NO)、タッチはマップ ビューにフォールスルーします - オーバーレイ ビューが存在しないかのように、これはまさにあなたが望むものです。つまり、マップ自体が半透明の色で覆われているように見えます。
これは、マップ ビューや mkoverlay とは関係ありません。それに応じてタグを修正する必要があります。これは、色かぶりまたはその他の視覚的変更を使用して任意のビューをオーバーレイすることに関する単純な質問です。
メソッドを実装することで、フィルタ ビューを作成できます-hitTest:withEvent:
。フィルター ビューをタッチすると、返されたビューで機能します。
指定されたポイントを含むビュー階層 (それ自体を含む) 内のレシーバーの最も遠い子孫を返します。
と呼ばれる MKMapView と と呼ばれるmapView
MapFilterView (UIView からサブクラス化された)があるとmapFilterView
します。どちらも のサブビューですがmainView
、レイヤー (mapFilterView
は on 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;
}
そして、あなたのメインView Controllerで(と仮定して-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_];
このコードは単なるサンプルです。自分でテストすることをお勧めします。これが役立つことを願っています! :)