gpt4 book ai didi

ios - UITableView scrollViewDidScroll 在动画上触发

转载 作者:可可西里 更新时间:2023-11-01 04:09:54 32 4
gpt4 key购买 nike

所以人们对这个特定事件的大部分问题是在动画发生时让 scrollViewDidScroll 触发。我的情况正好相反。我觉得 scrollViewDidScroll 不应该在我的情况下触发。

让我进一步解释。

我在 scrollViewDidScroll 中制作动画,在我将 UITableView 移动到 UIView 类之前,它工作得很好。

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
// Animation code here.
NSLog(@"scrollViewDidScroll");
}

- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"scrollViewDidEndDecelerating");
NSArray *indexPaths = [_myTableView indexPathsForVisibleRows];
[_myTableView scrollToRowAtIndexPath:[indexPaths objectAtIndex:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}


这提供了一种平滑的滚动体验,可以快速返回到上一个表格行。控制台可以验证 scrollViewDidScroll 事件是否因 scrollToRowAtIndexPath 而触发。

控制台:

2014-03-31 22:21:43.346 Project[45843:a0b] scrollViewDidScroll
2014-03-31 22:21:43.379 Project[45843:a0b] scrollViewDidScroll
2014-03-31 22:21:43.429 Project[45843:a0b] scrollViewDidScroll
2014-03-31 22:21:43.462 Project[45843:a0b] scrollViewDidScroll
2014-03-31 22:21:43.479 Project[45843:a0b] scrollViewDidEndDecelerating
2014-03-31 22:21:43.496 Project[45843:a0b] scrollViewDidScroll
2014-03-31 22:21:43.513 Project[45843:a0b] scrollViewDidScroll
2014-03-31 22:21:43.529 Project[45843:a0b] scrollViewDidScroll

关于问题:

1。如何确保事件 scrollViewDidScroll 仅因用户交互而非代码自动化而触发?

2。是否有另一种方法可以提供与 scrollToRowAtIndexPath 相同的功能而不触发 scrollViewDidScroll

最佳答案

我知道这是一个非常古老的问题。我只是处于类似的情况,我只需要在用户滚动时运行一些代码,而不是在我调用 scrollToRowAtIndexPath 时。我找到了一个更简单的解决方案,使用 scrollView 变量 draggingdecelerating

我们这里有 3 种滚动的情况。

  1. 用户正在拖动
  2. 用户刚刚结束拖动,tableview 正在减速
  3. 以编程方式调用 scrollForRowAtIndexPath:

以上所有情况都会触发scrollViewDidScroll: 但是

  1. 用户正在拖动 draggingTrue 并且 deceleratingFalse
  2. 用户刚刚结束拖动,tableview 正在减速 draggingFalsedeceleratingTrue
  3. 以编程方式调用 scrollForRowAtIndexPath: draggingFalse 并且 deceleratingFalse

所以你的代码应该是这样的:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.dragging)
{
// Do what you want when user is dragging
} else if (scrollView.decelerating)
{
// Do what you want when table is decelerating after finished dragging
} else
{
// Do what you want when table is scrolling programmatically.
}
}

或者如果你只想以编程方式区分滚动

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.dragging || scrollView.decelerating)
{
// Scrolling by the user
} else
{
// Scrolling by the code
}
}

关于ios - UITableView scrollViewDidScroll 在动画上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22777532/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com