1
- (void)viewDidLoad
{
    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
    tapRecognizer.numberOfTapsRequired = 1;
    tapRecognizer.numberOfTouchesRequired = 1;
    [self.myMapView addGestureRecognizer:tapRecognizer];
}

-(void)foundTap:(UITapGestureRecognizer *)recognizer
{
    CGPoint point = [recognizer locationInView:self.myMapView];  
    CLLocationCoordinate2D tapPoint = [self.myMapView convertPoint:point toCoordinateFromView:self.view];
    MKPointAnnotation *point1 = [[MKPointAnnotation alloc] init];
    point1.coordinate = tapPoint;
    [self.myMapView addAnnotation:point1];
}

上記のコードを使用して、MKMapView で場所を選択したときに、MKMapView で正確に触れた場所を指していません。触れた場所から少し離れています。私のコードの何が問題なのですか?前進。

4

2 に答える 2

1

他の答えがあなたのために働いていることは知っていますが、適切な使用方法を示したかっただけconvertPoint:toCoordinateFromView:です。コンテナー ビューを渡す代わりに、ポイントがあるマップ ビューを渡す必要があります。

CLLocationCoordinate2D tapPoint = [self.myMapView convertPoint:point
                                          toCoordinateFromView:self.myMapView];

これにより、ビュー間の交換が節約されます。完全な方法は次のとおりです。

-(void)foundTap:(UITapGestureRecognizer *)recognizer
{
    CGPoint point = [recognizer locationInView:self.myMapView];  
    CLLocationCoordinate2D tapPoint = [self.myMapView convertPoint:point toCoordinateFromView:self.myMapView];
    MKPointAnnotation *point1 = [[MKPointAnnotation alloc] init];
    point1.coordinate = tapPoint;
    [self.myMapView addAnnotation:point1];
}
于 2013-07-15T09:44:10.480 に答える
1

渡されたオブジェクトをlocationInView:メソッドに変更してみてくださいself.view:

-(void)foundTap:(UITapGestureRecognizer *)recognizer
{
    CGPoint point = [recognizer locationInView:self.view];  

    CLLocationCoordinate2D tapPoint = [self.myMapView convertPoint:point toCoordinateFromView:self.view];

    MKPointAnnotation *point1 = [[MKPointAnnotation alloc] init];

    point1.coordinate = tapPoint;

    [self.myMapView addAnnotation:point1];
}
于 2013-07-15T06:41:08.277 に答える