2013-06-22 2 views
4

установкиUICollectionView пейджинговой перерывы после 2^24 пикселей

У меня есть UICollectionView, что позволяет пользователю пролистать снимки, 12 на страницу. Есть более 200 000 изображений, которые должны быть доступны в приложении. Я не ожидаю, что пользователь перейдет на страницу 20 000, так что есть функция для перехода на определенную страницу.

Проблема

В альбомной ориентации, пейджинг срывается на странице 16,385. Коллекция больше не настраивается на границу страницы. Если вы вернетесь до страницы 16,384, вы можете заставить его снова начать работать, но ни одна страница за 16,385 не работает.

Мой делегат также прекращает получать сообщение scrollViewDidEndDecelerating:, когда появляется ошибка.

Гипотеза

Страница 16385 в альбомной ориентации происходит, чтобы начать на пиксель 16,777,216 который бывает 2^24. Я думаю, что есть что-то в UICollectionView или UIScrollView, который пробивает 2^24.

Это просто недокументированный лимит? Мне повезло?

Пример

Я загрузил project, демонстрирующую проблему. Here's Соответствующий контроллер просмотра. Если вы встряхнете iPad или симулятор, вы попадете на страницу 16,384, на одну страницу, пока не появится ошибка.

Снарк

Если вы не думаете, что пользователь должен нуждаться, чтобы иметь возможность перейти на страницу 20000, это круто. Я не думаю, что это имеет отношение к вопросу.

+5

Имейте в виду, что 'CGFloat' является 32-битным числом с плавающей запятой IEEE, поэтому у него есть только 24-битная мантисса. Поэтому в диапазоне от 2^24 до 2^25 он может хранить только кратные 2; он не может хранить какие-либо нечетные числа (например, 16 777 217). Это, безусловно, может быть связано с вашей проблемой, поскольку все координаты и размеры, связанные с просмотром, хранятся с использованием 'CGFloat'. –

+0

@robmayoff Это звучит так, будто это может быть преступником. Я думал, что это что-то в этом роде, но не смог найти ссылку на него. –

ответ

2

Я бы сказал, что это недокументированное ограничение и будет содержать отчет об ошибке Radar, содержащий пример проекта в качестве доказательства. Если вы ищете альтернативный метод, вы можете попробовать использовать UIPageViewController с видом коллекции для каждой страницы. Вы можете выбрать анимацию swiping, а не анимацию iBooks-esque по умолчанию, и очень тщательно повторить ваш образец проекта.

+0

Хорошая идея с 'UIPageViewController'. Я сделаю это. –

+0

Не делайте ошибку. Ограничение ожидается и предел достаточно высок. Использование вида просмотра коллекции/просмотра таблицы/прокрутки таким образом просто неверно. – Sulthan

+0

Не ожидается. Число высокое, но это не значит, что все в порядке. –

0

Вы можете загрузить только 10 000 страниц, а когда пользователь скачет, загрузите соответствующие 10 000 страниц.

0

Интересно, пытались ли вы использовать несколько разделов? Является ли ограничение для каждого раздела или для всего CV?