Предотвратить прокрутку за пределами области карты на карте Google

На самом деле я имею дело с Google Maps Framework для iOS, и я хочу заблокировать прокрутку за пределами заданной области.

То, что я пытался сделать сначала, реализовать метод делегата: - (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position и сравнить положение карты с правым/левым углами. Но то, что я сделал, имеет много проблем при прокрутке или масштабировании.

Ниже пример моей реализации:

 - (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position {  

    if (position.target.latitude > topLat) { 
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:topLat
                                                                      longitude:position.target.longitude
                                                                            zoom:position.zoom
                                                                            bearing:220
                                                                            viewingAngle:0];

        [self.mapView animateToCameraPosition:goBackCamera];
    }

    if (position.target.latitude < bottomLat) {
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:bottomLat
                                                                      longitude:position.target.longitude
                                                                           zoom:position.zoom
                                                                        bearing:220
                                                                   viewingAngle:0];
        [self.mapView animateToCameraPosition:goBackCamera];
    }

    if (position.target.longitude > rightLong) {
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:position.target.latitude
                                                                      longitude:rightLong
                                                                           zoom:position.zoom
                                                                        bearing:220
                                                                   viewingAngle:0];
        [self.mapView animateToCameraPosition:goBackCamera];
    }

    if (position.target.longitude < leftLong) {
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:position.target.latitude
                                                                      longitude:leftLong
                                                                           zoom:position.zoom
                                                                        bearing:220
                                                                   viewingAngle:0];
        [self.mapView animateToCameraPosition:goBackCamera];
    }
}

У вас нет более эффективного способа справиться с этим?

PS: TopLat, RightLong... означает верхнюю широту и правую долготу и т. д.

С уважением


person Ali    schedule 18.03.2015    source источник


Ответы (2)


Один из способов, который я могу придумать, - настроить привязку на карте, если вы хотите, чтобы карты прокручивались, используя GMSCoordinateBounds.

Следующее, что вы можете сделать, это настроить жест прокрутки, чтобы true только в том разделе карт, который вы указали выше. Для остальной части карты жест прокрутки должен быть ложным.

person AniV    schedule 19.03.2015

Используйте метод GMSCoordinateBounds (северо-восточные координаты, юго-западные координаты). Это может быть полезно Справочник по классу GMSCoordinateBounds

person Deepak Terse    schedule 01.03.2018
comment
Дайте мне знать, если вам нужна дополнительная помощь - person Deepak Terse; 01.03.2018