如何将 MKCircleView 的一个位置移动到 MKMapView 中的另一个位置?

Posted

技术标签:

【中文标题】如何将 MKCircleView 的一个位置移动到 MKMapView 中的另一个位置?【英文标题】:How to Move MKCircleView at one position to another position in MKMapView? 【发布时间】:2013-08-23 13:55:53 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

@property (nonatomic, weak) MKCircle *overlay;

然后,定义一个UIPanGestureRecognizer 来执行拖放操作:

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.mapView addGestureRecognizer:pan];

要使手势可取消,您应该导入以下标头:

#import <UIKit/UIGestureRecognizerSubclass.h>

您需要为此手势识别器编写一个处理程序,为您拖动的位置添加一个覆盖并删除旧的(但如果手势没有从覆盖上开始,则取消该手势):

- (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;
    

注意,地图的scrollEnabled 必须关闭才能识别此手势。

【讨论】:

以上是关于如何将 MKCircleView 的一个位置移动到 MKMapView 中的另一个位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何将提示位置移动到标题下方或后退按钮位置

如何将 UIImageVIew 实时移动到 UILabel 的位置?

QTabWidget。如何将一个标签移动到正确的位置?

将数组元素从一个数组位置移动到另一个位置

如何将光标移动到 Javascript 中文本区域的最后一个位置?

如何将 DataTable 行移动到其 DataTable 的第一个位置