Как сделать так, чтобы UIScrollView навсегда прокручивался с нумерацией страниц? - PullRequest
1 голос
/ 26 сентября 2010

Мне нравится 20 предметов, из которых пользователь может выбирать. Теперь я хочу сделать UIScrollView с включенной нумерацией страниц, которая позволяет прокручивать навсегда. Если достигнут конец, начало добавляется и т. Д.

Какой самый простой способ сделать что-то подобное? Я боюсь, что когда я достигну смещения, скажем, у = 10000.0f, это может повлиять на память. Не уверен.

Также важен плавный «бесконечный скроллинг». Так что установка смещения на 0/0 при достижении конца, скорее всего, не сработает ... Я помню, что пытался сделать это год назад, и UIScrollView анимировал все это назад (неправильное направление, от конца к началу), когда смещение было установлено на что-то другое.

1 Ответ

3 голосов
/ 27 сентября 2010

Большое смещение не потребляет дополнительной памяти;это только требует, чтобы CoreAnimation имел дело с большими числами.Это нормально, за исключением того, что ...

CGFloat - это поплавок на устройстве (IIRC - двойной на Mac OS X).Это означает, что он может представлять целые числа примерно до 2 24 (около 16,7 миллионов), таким образом, половинные целые числа составляют примерно до 8 миллионов (и «дисплей сетчатки» имеет пиксели половинного размера).Если пользователь прокрутит очень далеко, вы потеряете точность.Я не уверен, где именно это происходит.Вы можете попробовать установить для contentSize и contentOffset очень большие значения и посмотреть, что произойдет.

Если вам действительно нужна прокрутка "навсегда" в стиле UIDatePicker, у вас есть несколько вариантов:

  • Реализациятвой собственный.Это не слишком сложно, и производительность не будет , что плохо (я думаю, вы получите scrollViewDidScroll: обратный вызов на кадр).
  • Сделайте contentSize "достаточно большимmsgstr "(около 1 миллиона, но учтите, что это должно быть кратно размеру страницы), а содержание смещено где-то посередине.Сбросьте значение contentOffset к среднему значению, когда пользователь остановил прокрутку:
    • scrollViewDidEndDragging:willDecelerate: (но только если decelerate == NO)
    • scrollViewDidEndDecelerating:
    • scrollViewDidEndScrollingAnimation:
    • scrollViewDidScrollToTop: (возможно; я не уверен, отправляет ли он scrollViewDidEndScrollingAnimation: тоже).

Это означает, что пользователь может дойти до конца и отскочитьесли они попробуют очень сильно (миллион «очков» iPhone составляет около 160 м).Ну хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...