Нахождение свободного места в текущих границах просмотра на iOS - PullRequest
0 голосов
/ 06 марта 2012

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

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

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

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2012

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

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

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

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

UPDATE

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

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

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

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

ОБНОВЛЕНИЕ 2:

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

Удачи!

...