八、ArcGIS Runtime SDK for iOS 100.X教程系列之双地图联动

该新版本的SDK开放了实时回调mapView滚动变化的回调(很良心,还是60帧的回调),无需开发者自己去监听相关属性的变化。

首先,我们要得到mapView实时的滚动回调:

//mapView是AGSMapView实例对象
    __weak __typeof(self)weakSelf = self;
    self.mapView.viewpointChangedHandler = ^{
        NSLog(@"地图中心点:%@,拉伸层级:%@,旋转角度:%@",weakSelf.mapView.visibleArea.extent.center, @(weakSelf.mapView.mapScale),@(weakSelf.mapView.rotation));
    };

然后就是确定是哪个地图跟随哪个地图联动,逻辑很简单,即非用户操作的那个地图跟随用户操作的那个地图联动,确定当前地图是否被用户操作,有一个代理回调(AGSMapView的touchDelegate回调):

-(void)geoView:(AGSGeoView*)geoView didTouchDownAtScreenPoint:(CGPoint)screenPoint
      mapPoint:(AGSPoint*)mapPoint
    completion:(void(^)(BOOL willHandleDrag))completion {
    //此block回调YES,说明用户操作要被拦截,mapView不响应操作
    //回调NO,即mapView响应操作
    completion(NO);
    
    //此处说明该geoView被用户操作了,写联动逻辑处理
}

最后,跟着联动的mapView代码设置移动、放大或者旋转:

[self.otherMapView setViewpoint:[[AGSViewpoint alloc] initWithCenter:self.mapView.visibleArea.extent.center scale:self.mapView.mapScale] duration:0 curve:AGSAnimationCurveLinear completion:^(BOOL finished) {
        
    }];

跟随联动的代码不用设置动画时间,另外代码中的(AGSGeoView*)geoView即AGSMapView实例对象,利用了多态特性,假若联动逻辑代码写在一个控制器,可以根据geoView对象的比对来确定联动关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值