高德地圖iOS SDK限制地圖的縮放比例


問題

高德地圖的iOS SDK 3D版中(v2.4.0), 顯示范圍在560m左右時建築會呈現3D效果. 我們有沒有辦法可以限制地圖最小縮放到這個比例, 從而保證建築始終使用3D效果顯示呢?

探索

高德地圖的MAMapView再怎么封裝也是個UIView, 通過加斷點很容易看出它的結構

很明顯, 地圖上的操作都是依賴UIGestureRecognizer來處理的. 為了限制地圖的交互, 我們只需要想辦法修改一下這些gesture的處理邏輯即可.

對於pinch操作它提供了pinchGesture:  一個直接的想法是繼承並重寫這個方法, 但總是有些略繁瑣.

一個gesture是可以綁定多個處理方法的, 我們可以選擇一個更hack的方法. UIPinGestureRecognizer只有一個scale屬性是可讀寫的, 按理說地圖的縮放應該是直接根據這個屬性來調整的. 那么我們只要能夠讓這個值保持不變, 那就可以讓地圖也不再跟着縮放了. 結果證明這么做是沒問題的.

核心代碼如下:

- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        _lastPinchScale = recognizer.scale;
    }
    auto meter = [_map metersPerPointForCurrentZoomLevel];
    if (recognizer.velocity < 0 && meter > MaxMeter) {
        _builtinPinch.scale = _lastPinchScale;
    }
    _lastPinchScale = _builtinPinch.scale;
}

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM