八、ArcGIS Runtime SDK for iOS 100.2.1教程系列之雙地圖聯動

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章