UIScrollView с несколькими уровнями масштабирования? - PullRequest
2 голосов
/ 11 января 2012

Есть ли способ, которым я могу контролировать, какие подпредставления UIScrollView масштабируются, а какие нет?

Например, в качестве нижнего слоя у меня есть карта (не MapKit, просто плоское изображение), которую можно масштабировать и панорамировать. В зависимости от выбора пользователя маркеры сбрасываются на карту для обозначения конкретных зданий / мест и т. Д. Эти маркеры также являются UIImageView и используют пиксельные координаты изображения карты (например, здание X находится в (934, 842), маркер размещается Вот). Однако при уменьшении масштаба эти маркеры несколько трудно увидеть, так как они также масштабируются / уменьшаются до того же уровня, что и карта.

Так есть ли способ, которым я могу сказать UIScrollView НЕ масштабировать изображения маркеров, но все же позволить ему панорамировать / изменять их расположение при увеличении изображения карты?

1 Ответ

1 голос
/ 11 января 2012

Я думаю, что вы можете искать метод UIScrollViewDelegate

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

Это позволяет вам вернуть вид, к которому вы хотите применить масштабирование, в вашем случае это будет фоновое изображение карты.

Если вы не хотите, чтобы маркеры масштабировались одновременно, вам нужно будет добавить маркеры непосредственно как подпредставления UIScrollView вместо того, чтобы добавлять их в качестве подпредставлений вашей фоновой карты UIImageView.

Как вы упомянули, маркеры располагаются относительно фона карты UIImageView, это означает, что если вы добавите маркеры к UIScrollView, они не будут размещены в одной и той же позиции на карте после изменения свиток.

Чтобы решить эту проблему, вам необходимо рассчитать эквивалентные координаты относительно UIScrollView.

Хотя это может показаться довольно пугающим, на самом деле это довольно тривиально, если вы знаете коэффициент масштабирования.

Чтобы получить коэффициент масштабирования, используйте метод UIScrollViewDelegate

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

Тогда вы можете получить коэффициент масштабирования, позвонив по номеру:

scrollView.zoomScale

и пересчитайте координаты маркера, применив zoomScale к исходным значениям, и соответственно измените положение маркеров.

Справка:

Справочник по классам UIScrollView

Справочник по протоколу UIScrollViewDelegate

Надеюсь, это поможет:)

...