Поиск свободного места в текущих границах обзора на iOS

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

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

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

Спасибо!


person Sorin Cioban    schedule 06.03.2012    source источник


Ответы (1)


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

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

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

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

ОБНОВИТЬ

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

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

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

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

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

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

Удачи!

person QED    schedule 06.03.2012
comment
У моего прокрутки есть возможность прокручивать в любом направлении, поэтому я не мог использовать для этого табличное представление. Что касается его бесконечности, он не расширяется бесконечно, он только перемещает изображения, находящиеся в данный момент на экране, в направлении, противоположном прокрутке, и когда имеется более 20 подпредставлений, я удаляю самое первое добавленное и так далее. - person Sorin Cioban; 06.03.2012
comment
Если он прокручивается в обе стороны, то я не понимаю концепции, которую вы используете в отношении макета этих изображений в режиме прокрутки. Можете ли вы добавить немного ясности? Может скриншот того, что у вас уже есть? - person QED; 06.03.2012
comment
Вот пример: twitpic.com/8slalg — поэтому вся область, которую я добавила сверху, имеет различные виды изображения на нем. Теперь изображение, на которое я не поместил листья, должно быть добавлено сразу под изображением над ним и справа от изображения слева. Мой вопрос в том, как мне найти точное (x, y), где изображение должно идти, не тратя слишком много процессорного времени? - person Sorin Cioban; 06.03.2012
comment
Йоса! Хорошая картинка, мне очень нравится эффект. Но на ум приходят несколько разных вещей, и мне понадобится время, чтобы добавить их к моему ответу... - person QED; 06.03.2012
comment
Отлично - я с нетерпением жду их ответа :-) Не могли бы вы написать мне по адресу appetizer.inc [AT] gmail.com, чтобы мы могли больше поговорить об этой проблеме? Спасибо :-) - person Sorin Cioban; 06.03.2012
comment
Образами являются не листья. Листья, которые я использовал только для покрытия изображений в своем приложении :) Я хочу, чтобы пространство между изображением с текстом Girls... и изображением слева от него (между двумя изображениями есть серый бит) исчезло. Таким образом, конечным результатом будут два изображения рядом друг с другом без пробела между ними. - person Sorin Cioban; 06.03.2012
comment
Являются ли листья частью приложения? Во всяком случае, достаточно на листьях, я думаю. Ваши изображения полностью разного размера? У вас вообще должен быть этот серый фон? Вы можете просто сделать это белым? - person QED; 06.03.2012
comment
Если хотите, присоединяйтесь ко мне в чате iOS (chat.stackoverflow.com/rooms/682/iphone-ipad). ) - person QED; 06.03.2012
comment
Нет, листья не являются частью приложения. Изображения имеют стандартную ширину 150. Отличается высота. Я не могу сделать фон белым, так как не все изображения имеют белые края, и должно быть ощущение, что изображения расположены рядом друг с другом, а не далеко друг от друга. - person Sorin Cioban; 06.03.2012