八、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对象的比对来确定联动关系。

Supongo que te gusta

Origin blog.csdn.net/qq_31672459/article/details/79785759
Recomendado
Clasificación