Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps SDK iOS - prevent map from changing location on zoom

I have a problem that I can't solve for some time.

I have a GMSMapView with imageView in front of it in the center. In result - I can drag map and always have centered pin. But problems come when I zoom the map. On zooming - position of map target changes and my imageView points to another location.

I can detect if zoom changed, but I cant actually force GMSMapView to do ONLY zoom without any location changing.

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

So basically, I want to have always centered pin, even if I perform zoom. I tried GMSMarker - but it has problems with performance when following map center. It doesn't do it instantly, so I decided to use imageView.

Main question: how to lock current location of the map while performing zoom?

like image 664
quarezz Avatar asked Oct 24 '25 19:10

quarezz


2 Answers

Google fixed this issue with google maps sdk 1.10.0.

The solution is to simply add this line when configuring GMSMapview:

_mapView.settings.allowScrollGesturesDuringRotateOrZoom = NO;
like image 84
UNIQL Avatar answered Oct 26 '25 08:10

UNIQL


Well, after 10 days of going back to this problem, I finally solved it! The answer was pretty easy!

Few steps here: 1. Add imageView as marker on top of the GMSMapView 2. Add UIPanGestureRecognizer to the GMSMapView (don't forget to set delegate, it is important) 3. Then use this code:

- (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;
}
like image 29
quarezz Avatar answered Oct 26 '25 10:10

quarezz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!