24

のインスタンスで 1 回のタップを検出するにはどうすればよいMKMapViewですか? メソッドをサブクラス化してからMKMapViewオーバーライドする必要がありますtouchesEndedか?

ありがとう、

-クリス

4

8 に答える 8

35

マップの他のタッチ動作に影響を与えずにタップ ジェスチャの通知を受け取るだけの場合は、UITapGestureRecognizer. これは非常に簡単で、次のようなコードを挿入するだけです。

UITapGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] 
   initWithTarget:self action:@selector(didTapMap:)];
[theMKMapView addGestureRecognizer:tapRec];
[tapRec release];

これにより、タップ ジェスチャとすべてのピンチおよびドラッグ ジェスチャを受け取るdidTapMapたびに が呼び出され、以前と同様に機能します。theMKMapView

于 2010-12-31T20:30:58.040 に答える
3

または、何をしようとしているのかに応じて、MKAnnotation(押しピン、コールアウト付き) を追加して、タップするものを用意します。すると、マップ デリゲートはイベントを受け取ります。

mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control

于 2009-09-18T08:31:48.117 に答える
3

iOS 8 で完璧に動作

- (void)viewDidLoad 
    {
        [super viewDidLoad];

        UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
        doubleTap.numberOfTapsRequired = 2;
        doubleTap.numberOfTouchesRequired = 1;
        [self.mapView addGestureRecognizer:doubleTap];

        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
        singleTap.numberOfTapsRequired = 1;
        singleTap.numberOfTouchesRequired = 1;
        [singleTap requireGestureRecognizerToFail: doubleTap];
        [self.mapView addGestureRecognizer:singleTap];
     }

   - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
     {
            if (gestureRecognizer.state != UIGestureRecognizerStateEnded)
                return;
            //Do your work ...
     }
于 2015-04-03T10:46:15.557 に答える
3

これが役立つことを願っています: MKMapView または UIWebView オブジェクトのタッチ イベントをインターセプトする方法は?

于 2009-11-10T12:27:54.610 に答える
0

現時点では、マップビューのタッチをインターセプトすることはできません。その上に不透明なビューを重ねて、タッチを検出するかどうかを確認できます...

于 2009-08-14T02:59:49.683 に答える
0

@tt-kilewの回答の例として、いくつかのコードスニペットを追加してください。私の場合、ユーザーを地図上で自分自身に向けたいのですが、ドラッグタッチを中断したくありません。

@interface PrettyViewController () <MKMapViewDelegate>

@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property (assign, nonatomic) BOOL userTouchTheMap;

@end

@implementation PrettyViewController

#pragma mark - UIResponder

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    self.userTouchTheMap = [[touches anyObject].view isEqual:self.mapView];
}


#pragma mark - MKMapViewDelegate

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    //We just positioning to user
    if (!self.userTouchTheMap) {
        CLLocationDistance radius = 5000;
        [self.mapView setRegion:MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 2*radius, 2*radius) animated:YES];
    }
}

@end
于 2017-04-07T13:59:53.857 に答える