2011-03-03 11 views
1

UIGestureRecognizerを使用してサブクラス化されたMKOverlayViewでイベントをキャプチャしようとしました。 しかし、セレクタは決して起動しません。何か案は?UIGestureRecognizerを使用したMKOverlayViewのジェスチャーイベントのキャプチャ

インタフェース:

#import <MapKit/MapKit.h> 

@interface XYOverlayView : MKCircleView {} 
-(void) viewTapped:(UIGestureRecognizer *)gestureRecognizer; 
@end 

IMP:

@implementation XYOverlayView 

- (id)initWithOverlay:(id <MKOverlay>)overlay 
{ 
    if(self = [super initWithOverlay:overlay]) 
    { 
     self.userInteractionEnabled = TRUE; 
     self.multipleTouchEnabled = TRUE; 

     UITapGestureRecognizer *tapRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)]; 
     [self addGestureRecognizer:tapRecogniser]; 
     [tapRecogniser release]; 
    } 
    return self; 
} 

-(void) viewTapped:(UIGestureRecognizer *)gestureRecognizer 
{ 
    NSLog(@"XYOverlayView tapped"); 
} 
@end 
+0

ジェスチャー認識装置は、オーバーレイビュー上では動作しません。 'MKMapView'はすべてのオーバーレイビューをクラス' MKOverlayContainerView'のコンテナレイヤに入れ、 ' - [MKOverlayContainerView pointInside:withEvent:]'は常に 'NO'を返します。これは、タッチがオーバーレイビューの内側にあるとは決して考えられないため、オーバーレイビューにアタッチされたジェスチャ認識器には触れません。 –

答えて

0

これは機能しませんでした。カスタムMKAnnotationViewに切り替えてジェスチャーをキャプチャします。これはまた、ウィンドウ内のテープ可能領域が同じサイズのままであるという利点を有する。

0

あなたのインターフェイスでUIGestureRecognizerDelegateを実装するのを忘れて、あなたが指定してくださいUIKitの
#import <UIKit/UIKit.h>
@interface XYOverlayView : MKCircleView <UIGestureRecognizerDelegate>

+0

OPはUIGestureRecognizerDelegateメソッドを使用していません。 UIKitがインポートされなかった場合、メソッドが起動していないことを知るのに十分な距離にはなりませんでした。 –

+0

実際、プレフィックスヘッダーを介してUIkitが追加されています。ジェスチャー認識ツールにはUIGestureRecognizerDelegateは必要ありません。しかし、 ' - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer'と ' - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch'からTRUEを返そうとしました。いいえ運は... – RickyA

0

をインポートする必要がありますnumberOfTapsRequirednumberOfTouchesRequiredそうでなければ、ジェスチャ認識プログラムは何を受け取るべきかを知らない'タップ'としてept。

tapRecogniser.numberOfTapsRequired = 1; 
tapRecogniser.numberOfTouchesRequired = 1; 
+0

ドキュメントごとに、これがデフォルトです。それらを指定しても助けにならない... – RickyA

+0

XYZOverlayViewはMKCircleViewまたはMKOverlayViewのサブクラスであるはずですか? 'initWithCircle:'を使わない場合は、MKOverlayViewのサブクラスとして使ってみませんか? –

0

私はここに私の答えは解決策になるかもしれないと思う:MapKitは、具体的作業からそれらを防ぐためMKOverlayView and touches

関連する問題