UIScrollView ImageView с контактами на вершине

Человеческий мозг - главный ключ ко всем замкам.

В этом мире нет ничего, что могло бы ускорить ваш мозг. Поверьте мне, это не философский, а практический. Что касается мнений, то они соответствуют


1) Никогда не выходите за пределы, указанные в языке программирования. Простым примером будут указатели на C и C ++. Не используйте их не по назначению, так как вы можете получить DAMN SEGMENTATION FAULT.

2) Всегда следуйте стандартам кодирования, да, то, что вы читаете, правильно, стандарты кодирования имеют большое значение для вашей программы, После того, как вся ваша программа написана для выполнения машиной, но для понимания каким-то другим мозгом :)

12
задан Smi 26 February 2013 в 21:43
поделиться

3 ответа

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

Якорь UIView

У меня есть иерархия представлений следующим образом.

UIScrollView
 - UIImageView (map image)
 - IconsView (layer image to hold icons)

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

] У меня был цикл for, который перебирал все мои контакты, которые являются подпредставлениями IconsView , и обновлял их Origin X и Y. Это было в UIScrollView делегатов scrollViewDidScroll метод.

Проблема заключалась в том, что этот метод плохо работал на устройстве, так как при большом количестве контактов на карте требуется слишком много обработки.

3
ответ дан 2 December 2019 в 21:45
поделиться

Несколько рекомендаций:

1) Вы заметите в приложении Google Maps, что оно ограничивает количество выводов, которые оно пытается отобразить по умолчанию. Он будет отображать только результаты, наиболее близкие к центральной точке, даже если есть больше возможных совпадений.

2) Вы можете ненадолго скрыть булавки во время любого действия прокрутки или щипка, чтобы интерфейс оставался отзывчивым и перерисовывал их в момент просмотра изображения перестает двигаться.

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

0
ответ дан 2 December 2019 в 21:45
поделиться

У меня та же проблема, и я считаю, что идея вручную исправить положение булавки не очень хороша. Затем я предпочитаю рисовать булавки в представлении, возвращенном функцией делегата viewForZoomingInScrollView: , и обновлять размер подпредставления (маркеров) после завершения масштабирования.

Однако меня раздражает, что это возможно в приложении Google Maps, но я не могу воссоздать это.

И еще кое-что: Может ли кто-нибудь объяснить мне, как выглядит экспонат, когда я добавляю в UIScrollView подпредставления, которые не являются viewForZoomingInScrollView ..? Например:

UIImageView* marker = [[UIImageView alloc] initWithImage: myMarkerImage];
[marker setCenter: CGPointMake(250,150)];
[myScrollView addSubview: marker];

Кажется, это нормально работает для начального просмотра и при панорамировании. При масштабировании размеры этих подпредставлений не меняются, что на самом деле является тем, к чему мы стремимся, но проблема в том, что начало кадра UIView перемещается через представление прокрутки довольно странным образом. Похоже, что при увеличении marker.frame.size.origin всегда перемещается в верхний левый угол (супервизор (0,0)), создавая впечатление, что мы на самом деле уменьшаем масштаб. Это тоже странно, потому что «центр масштабирования» всегда должен быть в центре экрана, не так ли? Ну, я пока не понимаю.

удар. ;)

0
ответ дан 2 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: