Lev*_*rts 5 objective-c uitableview uiscrollview ios ios7
因此,人们对这一特定事件的大多数问题都是在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];
}
Run Code Online (Sandbox Code Playgroud)
这提供了一个平滑的滚动体验,可以快速回到上一个表格行.控制台可以验证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
Run Code Online (Sandbox Code Playgroud)
在问题上:
1.如何确保事件scrollViewDidScroll仅在用户交互时触发而不是代码自动化?
2.是否有另一种方法提供与scrollToRowAtIndexPath不触发相同的功能scrollViewDidScroll?
Ism*_*ail 15
我知道这是一个非常古老的问题.我只是处于类似的情况,我只需要在用户滚动时运行一些代码而不是在我打电话时运行scrollToRowAtIndexPath.我发现这个使用了滚动变量的简单的解决方案dragging和decelerating.
我们这里有3个滚动案例.
scrollForRowAtIndexPath:所有的上述情况将触发scrollViewDidScroll: ,但
dragging是True并且decelerating为Falsedragging是False并且decelerating是TruescrollForRowAtIndexPath: dragging是False并且decelerating为False所以你的代码将是这样的:
- (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.
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想区分滚动编程
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.dragging || scrollView.decelerating)
{
// Scrolling by the user
} else
{
// Scrolling by the code
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |