2012-03-06 2 views
0

У меня есть бесконечное scrollview, в котором я добавляю изображения в виде пользовательских свитков. Эти изображения имеют разную высоту, и я пытался найти лучший способ найти ясное пространство внутри текущих границ представления, которое позволило бы мне добавить изображение.Поиск свободного пространства в текущих пределах зрения на iOS

Есть ли что-нибудь встроенное, что сделает мой поиск более эффективным?

Проблема в том, что я хочу, чтобы изображения были склеены друг с другом без пробелов между ними. Выполнение поиска через 320x480 пикселей имеет тенденцию быть довольно болотом процессора. Кто-нибудь знает эффективный метод для этого?

Спасибо!

ответ

0

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

В UIScrollView ничего не создано, что сделает это за вас. Вам нужно будет отследить ваши просмотры UIImageView вручную. Вы можете просто поддерживать координату max y, занимаемую вами изображениями, когда вы их добавляете.

Вместо этого вы можете использовать UITableView и внесите в свой делегат настроенный tableView:heightForRowAtIndexPath:. Вам, вероятно, понадобится сделать что-то особенное с фактическими ячейками, но это, похоже, сделает вашу работу немного легче.

Кроме того, для чего вы можете найти способ избежать принятия решения бесконечный. Будьте осторожны с вашей памятью! iOS отключит ваше приложение, если все выйдет из-под контроля.

UPDATE

Хорошо, теперь я понимаю, что вы собираетесь. Я подумал, что вы представляете фотографии или что-то такое прямоугольное. Если бы я пытался покрыть вид прокрутки UILeaf (wah wah), я бы взял статистический подход. Я бы «рисовал» листья случайным образом вдоль горизонтальных/вертикальных полос по мере прокрутки пользователя. Возможно, это вы уже делаете? Что бы вы ни делали, я думаю, что это выглядит хорошо.

Теперь я предполагаю, что причина, по которой вы просите, состоит в том, чтобы предотвратить появление маленьких случайных белых пятен - это правильно? Если я могу предложить другое решение: попробуйте покрасить фон вашего вида прокрутки на что-то земное, которое выглядит хорошо, если оно показывает здесь и там.

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

Кроме того, рассмотрите информацию о CoreAnimation (CALayer) и CoreGraphics/Quartz 2D). Правильное использование этих библиотек, вероятно, даст большие улучшения в скорости рендеринга.

UPDATE 2:

Если ваши изображения все 150px в ширину, а затем разделить ваш Scrollview в столбцы и добавить/удалить на основе этих (как описано в чате).

Удачи вам!

+0

Мое scrollview имеет возможность прокрутки в любом направлении, поэтому я не мог использовать табличное представление для этого. Что касается его бесконечности, он не распространяется бесконечно, он только перемещает изображения, находящиеся в настоящее время на экране, в противоположное направление прокрутки, а когда есть более 20 подзонов, я удаляю первый, который был добавлен, и так далее. –

+0

Если он прокручивается в обоих направлениях, то я не понимаю концепцию, которую вы используете в отношении макета этих изображений в прокрутке. Можете ли вы добавить некоторую ясность? Может быть, скриншот того, что у вас уже есть? – QED

+0

Вот пример: http://twitpic.com/8slalg - так что вся область, которую я добавил, выходит сверху, имеет разные образы изображений. Теперь изображение, которое я не помещал на листья, должно быть немедленно добавлено под надписью над ним и справа от левой слева. Мой вопрос в том, как найти точные (x, y), где должно идти изображение, не тратя слишком много процессорного времени? –

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