2012-01-10 1 views
2

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

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

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

ответ

1

Я думаю, что метод, который вы можете искать это UIScrollViewDelegate «s

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

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

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

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

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

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

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

- (void)scrollViewDidZoom:(UIScrollView *)scrollView 

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

scrollView.zoomScale 

и пересчитать маркер координат, применяя этот zoomScale к оригиналу значения и соответственно изменить маркеры.

Ссылка:

UIScrollView Class Reference

UIScrollViewDelegate Protocol Reference

Надеется, что это помогает :)

+0

Когда вы так выразиться, я почти немного раздражен, я не понимал, что сам. Спасибо кучи, я попробую и посмотрю, смогу ли я правильно позиционировать их. PS: Я бы поднял ваш ответ, но у меня пока нет этого, чтобы сделать это: P – Luefox

+0

Не стоит беспокоиться :) Надеюсь, вы заработаете! Если вы это сделаете, вы можете принять ответ вместо того, чтобы его перенести;) – Mutix

+0

Правильно, я понимаю математику получения правильных масштабированных координат, но как бы заставить их перемещаться по мере перемещения карты?Какая-то функция onZoom -> moveMarkers. – Luefox

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

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