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

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

【问题讨论】:

    标签: ios objective-c touch mkmapview uitapgesturerecognizer


    【解决方案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 必须关闭才能识别此手势。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 2017-10-19
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多