Ios 如何在MKMapView中将MKCircleView从一个位置移动到另一个位置?

Ios 如何在MKMapView中将MKCircleView从一个位置移动到另一个位置?,ios,objective-c,touch,mkmapview,uitapgesturerecognizer,Ios,Objective C,Touch,Mkmapview,Uitapgesturerecognizer,我正在使用MkCircle声明位置,现在我必须在MKMapView中将圆的位置从一个位置更改为另一个位置(拖放)。我怎样才能做到这一点。任何帮助都将不胜感激 首先,我建议您使用一些类属性来跟踪覆盖: @property (nonatomic, weak) MKCircle *overlay; - (void)handlePan:(UIPanGestureRecognizer *)gesture { static CGPoint originalPoint; if (gestu

我正在使用MkCircle声明位置,现在我必须在MKMapView中将圆的位置从一个位置更改为另一个位置(拖放)。我怎样才能做到这一点。任何帮助都将不胜感激

首先,我建议您使用一些类属性来跟踪覆盖:

@property (nonatomic, weak) MKCircle *overlay;
- (void)handlePan:(UIPanGestureRecognizer *)gesture
{
    static CGPoint originalPoint;

    if (gesture.state == UIGestureRecognizerStateBegan) {
        CGPoint point = [gesture locationInView:gesture.view];
        CLLocationCoordinate2D tapCoordinate = [self.mapView convertPoint:point toCoordinateFromView:gesture.view];
        CLLocation *tapLocation = [[CLLocation alloc] initWithLatitude:tapCoordinate.latitude longitude:tapCoordinate.longitude];

        CLLocationCoordinate2D originalCoordinate = [self.overlay coordinate];
        CLLocation *originalLocation = [[CLLocation alloc] initWithLatitude:originalCoordinate.latitude longitude:originalCoordinate.longitude];

        if ([tapLocation distanceFromLocation:originalLocation] > [self.overlay radius]) {
            gesture.state = UIGestureRecognizerStateCancelled;
            return;
        }
        else
            originalPoint = [self.mapView convertCoordinate:originalCoordinate toPointToView:gesture.view];
    }

    if (gesture.state == UIGestureRecognizerStateChanged) {
        CGPoint translation = [gesture translationInView:gesture.view];
        CGPoint newPoint    = CGPointMake(originalPoint.x + translation.x, originalPoint.y + translation.y);

        CLLocationCoordinate2D newCoordinate = [self.mapView convertPoint:newPoint toCoordinateFromView:gesture.view];

        MKCircle *circle = [MKCircle circleWithCenterCoordinate:newCoordinate radius:[self.overlay radius]];
        [self.mapView addOverlay:circle];
        [self.mapView removeOverlay:self.overlay];
        self.overlay = circle;
    }
}
然后,定义一个
ui测试识别器
,以执行拖放操作:

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.mapView addGestureRecognizer:pan];
要使手势可取消,应导入以下标题:

#import <UIKit/UIGestureRecognizerSubclass.h>
注意,必须关闭地图的
滚动启用
,才能识别此手势