Можно ли узнать окончательный UIScrollView contentOffset, прежде чем он заканчивается замедление? - PullRequest
4 голосов
/ 31 декабря 2011

Когда пользователь "щелкает" a UIScrollView, заставляя его прокручиваться с импульсом, есть ли способ выяснить окончательное значение contentOffset до окончания торможения?

В принципе, я хотел бы знатьчто является окончательным contentOffset изнутри scrollViewDidEndDragging:willDecelerate: вместо scrollViewDidEndDecelerating:

Существует свойство с плавающей точкой, называемое decelerationRate, которое может быть одним из кусочков головоломки, но мне еще предстоит выяснить, чтоделать с этим.

PS: у меня pagingEnabled установлен на YES.В iOS 5 на самом деле есть scrollViewWillEndDragging:withVelocity:targetContentOffset:, но док говорит, что он не срабатывает, если pagingEnabled равен YES

Ответы [ 2 ]

7 голосов
/ 18 июня 2013

Как я заметил, максимальный contentOffset можно рассчитать с самого начала, это просто разница между scrollview contentSize и размером кадра scrollview.Я рассчитал это на y вот так. maxOffsetY = scrollView.contentSize.height - scrollview.frame.size.height;

2 голосов
/ 31 декабря 2011

Возможно, есть лучший способ, но я бы попробовал вот что:

  1. реализовать scrollViewDidScroll: метод делегата и получить contentOffsets первых двух раз, когда этот метод вызывается (конечно, они должны быть сохранены вне метода).

  2. получить разницу между двумя показаниями смещения контента; это будет ваша дельта.

  3. теперь вы можете использовать дельту в качестве текущей скорости прокрутки и вашу скорость замедления, чтобы определить, сколько она будет прокручивать до того, как дельта станет 0. Это значение + - (в зависимости от выпадения прокрутки) при втором чтении смещение содержимого будет вашим «смещением прокрутки назначения».

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

надеюсь, это поможет

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