高德地圖iOS SDK限制地圖的縮放比例
問題
高德地圖的iOS SDK 3D版中(v2.4.0), 顯示范圍在560m左右時(shí)建筑會呈現(xiàn)3D效果. 我們有沒有辦法可以限制地圖最小縮放到這個(gè)比例, 從而保證建筑始終使用3D效果顯示呢?
探索
高德地圖的MAMapView再怎么封裝也是個(gè)UIView, 通過加斷點(diǎn)很容易看出它的結(jié)構(gòu)

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

對于pinch操作它提供了pinchGesture: 一個(gè)直接的想法是繼承并重寫這個(gè)方法, 但總是有些略繁瑣.
一個(gè)gesture是可以綁定多個(gè)處理方法的, 我們可以選擇一個(gè)更hack的方法. UIPinGestureRecognizer只有一個(gè)scale屬性是可讀寫的, 按理說地圖的縮放應(yīng)該是直接根據(jù)這個(gè)屬性來調(diào)整的. 那么我們只要能夠讓這個(gè)值保持不變, 那就可以讓地圖也不再跟著縮放了. 結(jié)果證明這么做是沒問題的.
核心代碼如下:
- (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;
}
效果圖:

浙公網(wǎng)安備 33010602011771號