Большое смещение не потребляет дополнительной памяти;это только требует, чтобы 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 м).Ну хорошо.