Google Maps SDK iOS - 防止地图在缩放时更改位置

时间:2015-01-16 18:56:32

标签: ios google-maps-sdk-ios

我遇到了一段时间无法解决的问题。

我在中心有一个带有imageView的GMSMapView。结果 - 我可以拖动地图并始终有中心针。但是当我缩放地图时会出现问题。 在缩放时 - 地图目标的位置发生变化,我的imageView指向另一个位置。

我可以检测到缩放是否发生变化,但实际上我无法强制GMSMapView进行缩放而不会改变任何位置。

-(void) mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position
{
    if (mZoomLevel != mapView.camera.zoom)
    {
        mZoomLevel = mapView.camera.zoom;
    }
}

所以基本上,即使我执行缩放,我也希望始终有中心针。 我尝试过GMSMarker - 但是在关注地图中心时遇到了性能问题。它没有立即执行,所以我决定使用imageView。

主要问题:如何在执行缩放时锁定地图的当前位置?

3 个答案:

答案 0 :(得分:6)

谷歌用谷歌地图sdk 1.10.0解决了这个问题。

解决方案是在配置GMSMapview时简单地添加此行:

_mapView.settings.allowScrollGesturesDuringRotateOrZoom = NO;

答案 1 :(得分:3)

好吧,经过10天回到这个问题,我终于解决了! 答案很简单!

这里几步:  1.将imageView作为标记添加到GMSMapView的顶部  2.将UIPanGestureRecognizer添加到GMSMapView(不要忘记设置委托,这很重要)  3.然后使用此代码:

- (void) didPan:(UIPanGestureRecognizer*) gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
    {
        _mapView.settings.scrollGestures = true;
    }
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (gestureRecognizer.numberOfTouches > 1)
    {
        _mapView.settings.scrollGestures = false;
    }
    else
    {
        _mapView.settings.scrollGestures = true;
    }
    return true;
}

答案 2 :(得分:-1)

斯威夫特3:

mapView.settings.scrollGestures = false