Есть ли способ, которым мы можем знать, прокручивается ли UITableView
в направлении вверх или вниз?
Как узнать, как прокручивается UITableView
Ответ 1
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint currentOffset = scrollView.contentOffset;
if (currentOffset.y > self.lastContentOffset.y)
{
// Downward
}
else
{
// Upward
}
self.lastContentOffset = currentOffset;
}
Ответ 2
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset{
if (velocity.y > 0){
NSLog(@"up");
}
if (velocity.y < 0){
NSLog(@"down");
}
}
Ответ 3
Можем ли мы это сделать?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) {
// down
} else {
// up
}
}
Ответ 4
UITableView
является подклассом UIScrollView
, поэтому вы можете установить себя как UIScrollViewDelegate
и получить обратные вызовы делегатов прокрутки.
Аргумент для одного из этих методов делегатов (-scrollViewDidScroll:
) - это прокрутка, прокручивающаяся, вы можете сравнить ее с табличными представлениями, чтобы узнать, какой из них был прокручен.
Извините, я неправильно понял ваш вопрос. Я думал, вы хотите узнать, какой вид таблицы просматривается (я пропустил "путь" ).
Чтобы знать направление, в котором вы можете сохранить предыдущее смещение в переменной, проверьте, является ли delta (current.y - previous.y) положительным (прокрутка вниз) или отрицательным (прокрутка вверх).
Ответ 5
Вы можете отслеживать разницу в смещении контента. Сохраните старый элемент в статической переменной и проверьте его. Если старое значение ниже, то прокрутка была направлена вниз и наоборот.
Ответ 6
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
if targetContentOffset.memory.y < scrollView.contentOffset.y {
//println("Going up!")
} else {
// println("Going down!")
}
}
Ответ 7
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if (yourTableView.isDragging || yourTableView.isDecelerating)
{
// your tableview is scrolled.
// Add your code here
}
}
Здесь вы должны заменить свое имя таблицы, а не "yourTableView".
yourTableView.isDragging. Он возвращает YES, если пользователь начал прокрутку. для начала может потребоваться некоторое время и/или расстояние для перехода.
yourTableView.isDecelerating. Он возвращает YES, если пользователь не перетаскивает (коснитесь вверх), но просмотр прокрутки все еще перемещается.
Ответ 8
Вы можете сделать это, реализовав метод UIScrollView
delegate таким образом, это изящно.
PS: lastOffset
и scrollingUpward
- свойство ViewController.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint currentOffset = scrollView.contentOffset;
self.scrollingUpward = currentOffset.y > self.lastOffset.y;
self.lastOffset = currentOffset;
}