2014-10-20 9 views
2

Я хотел бы установить «ограничивающий ограничитель» для SKMapView, чтобы запретить пользователю перемещаться, скажем, из рамки границы Германии (я имею координаты желаемый контейнер)Установить ограничительную рамку на SKMapView

Я предполагаю, что я использовать

mapView:didChangeToRegion: 

и

mapView:didStartRegionChangeFromRegion: 

Но я не могу заставить его работать сравнивая предыдущие visibleRegion с новым visibleRegion.

Любая идея о том, как это сделать?

Спасибо за помощь

ответ

1

Это, как вы могли бы сделать это только реализующий MAPview: didChangeToRegion:

if (![self.bbox containsLocation:region.center] || region.zoomLevel < self.minZoom) { 
    SKCoordinateRegion allowedRegion = region; 
    if (region.center.latitude > self.bbox.topLeftCoordinate.latitude) { 
     allowedRegion.center.latitude = self.bbox.topLeftCoordinate.latitude; 
    } else if (region.center.latitude < self.bbox.bottomRightCoordinate.latitude) { 
     allowedRegion.center.latitude = self.bbox.bottomRightCoordinate.latitude; 
    } 

    if (region.center.longitude > self.bbox.bottomRightCoordinate.longitude) { 
     allowedRegion.center.longitude = self.bbox.bottomRightCoordinate.longitude; 
    } else if (region.center.longitude < self.bbox.topLeftCoordinate.longitude) { 
     allowedRegion.center.longitude = self.bbox.topLeftCoordinate.longitude; 
    } 

    if (region.zoomLevel < self.minZoom) { 
     allowedRegion.zoomLevel = self.minZoom; 
    } 

    mapView.visibleRegion = allowedRegion; 

} 

Где self.bbox является SKBoundingBox с желаемым разрешенным ограничивающим параллелепипедом. и self.minZoom - минимально допустимый уровень масштабирования.

Это не идеальное решение по двум причинам: 1. Когда вы пытаетесь пересечь границы границ границы, карта немного шевельнулась. 2. Ограничивающая коробка не идеально подходит для помещения в страну. Упрощенный полигон будет лучше.

 Смежные вопросы

  • Нет связанных вопросов^_^