美文网首页
iOS 高德地图点击事件

iOS 高德地图点击事件

作者: ldclll | 来源:发表于2017-01-13 13:59 被阅读1139次

    本例是以高德地图覆盖物圆作为电子围栏,通过给mapview添加的Tap事件确定圆的经纬度,滑动slider修改圆的半径,来添加电子围栏。

    添加代理UIGestureRecognizerDelegate(为了解决点击事件冲突)

    - (void)viewDidLoad {
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    
        tap.delegate = self; //一定要记得设置代理
    
        [self.mapView addGestureRecognizer:tap];
    
    //获取上次设置的圈的经纬度和半径
        self.circle = [MACircle circleWithCenterCoordinate:self.touchMapCoordinate radius:self.Rslider.value];
    }
    
    //允许多个交互事件
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
    }
    
    //点击事件
    - (void)tap:(UITapGestureRecognizer *)tap
    {
        //移除屏幕上的圆
        [self.mapView removeOverlay:self.circle];
        
        //保存点击获取的经纬度
        self.touchMapCoordinate =
        [self.mapView convertPoint:[tap locationInView:self.mapView] toCoordinateFromView:self.mapView];
    
        //设置圆的位置
        self.circle.coordinate = self.touchMapCoordinate;
        
        //反地理编码获取详细地址
        [self getAddressByLatitude:self.touchMapCoordinate.latitude longitude:self.touchMapCoordinate.longitude];
    
        //显示经纬度及半径
        self.latitudeLb.text = [NSString stringWithFormat:@"%f", self.touchMapCoordinate.latitude];
        self.longitudeLb.text = [NSString stringWithFormat:@"%f", self.touchMapCoordinate.longitude];
        self.valueLabel.text = [NSString stringWithFormat:@"%.3f千米", self.Rslider.value/1000];
    
        //添加新圆到屏幕上
        [self.mapView addOverlay: self.circle];
    }
    
    //滑动slider改变圆的半径(ValueChange)
    - (IBAction)Rslider:(id)sender {
        self.valueLabel.text = [NSString stringWithFormat:@"%.3f千米", self.Rslider.value/1000];
    
        //移除屏幕上的圆
        [self.mapView removeOverlay:self.circle];
        self.circle = nil;
    
        //设置圆的半径(经纬度由点击事件获取)
        self.circle = [MACircle circleWithCenterCoordinate:self.touchMapCoordinate radius:self.Rslider.value];
    
        //添加新圆到屏幕上
        [self.mapView addOverlay:self.circle];
    }
    

    最终效果

    相关文章

      网友评论

          本文标题:iOS 高德地图点击事件

          本文链接:https://www.haomeiwen.com/subject/syqsbttx.html