該新版本的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對象的比對來確定聯動關係。