1

MapView画面にカラーマスクを追加し(座標なしで、すべてのmapViewに表示したい)、このmapViewのコントロールを維持したい。
MKOverlayについて聞いたことがありますが、すべてのマップでMKOverlayを使用する方法がわかりません。また、座標を使用せずに、すべてのマップ画面でMKOverlayが必要です。

誰かがその考えを持っていますか?

4

2 に答える 2

3

マップ ビューの上にビューを重ねることができます。これは、マップ ビューのサブビューではなく、そのスーパービューのサブビューである必要がありますが、マップ ビューの前にあります。オーバーレイ ビューの背景色が半透明の場合、透けて見えます。オーバーレイ ビューでユーザー インタラクションが無効になっている場合 ( userInteractionEnabled= NO)、タッチはマップ ビューにフォールスルーします - オーバーレイ ビューが存在しないかのように、これはまさにあなたが望むものです。つまり、マップ自体が半透明の色で覆われているように見えます。

これは、マップ ビューや mkoverlay とは関係ありません。それに応じてタグを修正する必要があります。これは、色かぶりまたはその他の視覚的変更を使用して任意のビューをオーバーレイすることに関する単純な質問です。

于 2012-12-02T01:15:33.453 に答える
2

メソッドを実装することで、フィルタ ビューを作成できます-hitTest:withEvent:。フィルター ビューをタッチすると、返されたビューで機能します。

指定されたポイントを含むビュー階層 (それ自体を含む) 内のレシーバーの最も遠い子孫を返します。

と呼ばれる MKMapView と と呼ばれるmapViewMapFilterView (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_];

このコードは単なるサンプルです。自分でテストすることをお勧めします。これが役立つことを願っています! :)

于 2012-12-02T01:55:45.130 に答える