Bar*_*obs 5 scroll uitableview ios
我目前正在处理UITableView实例中显示的数据流。新项目将添加到表格视图的顶部。
我面临的问题是,将新项目添加到表格视图时,可见动画和手势的轻微中断。当拖动(动画)后表格视图减速时以及拖动表格视图时,都会发生打cup。
到目前为止,我尝试过删除所有插入动画以及通过更新表视图的来补偿插入contentOffset。这些方法似乎都不起作用。
我刚刚想到这个问题。当 tableView 到达最后一行时,我试图将新行添加到其中。您不能随时执行此操作,否则最终会出现动画断断续续或 tableView 动画突然停止的情况。
我发现在动画(或用户拖动手势)结束之前无法启动 beginAnimations/endAnimations 块。要实现此目的,您必须检查两种方法:
- -(void)scrollViewDidEndDragging:willDecelerate::这会告诉您用户何时停止拖动 tableView,可能是在 tableView 的末尾。如果willDecelerate为“否”,则表明用户将手指“按住”在 tableView 上并且刚刚抬起。这是添加行的好地方。您可以下载 Twitter 应用程序来查看这方面的示例。尝试将手指放在最后一排。在您抬起应用程序之前,该应用程序不会更新推文。
-(void)scrollViewDidEndDecelerating:这将告诉您用户已触摸表视图并正在完成减速,可能是在表视图的末尾。这也是更新 tableView 的好地方。
看一下这个代码示例:
-(void)shouldUpdateOnScrollView:(UIScrollView*)scrollView{
// Check if we are at the end of the tableView
CGFloat currentOffset = scrollView.contentOffset.y;
CGFloat maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;
// Change 10.0 to adjust the distance from bottom you want to check for
if (maximumOffset - currentOffset <= 10.0) {
// Do not throw an update if we are just updating
if (!_loading && !_allDownloaded) {
_loading = YES;
// dispatch_async just to not break the current animation
dispatch_async(dispatch_get_main_queue(), ^{
[self obtainNextPostsFromBegining:NO];
});
}
}
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"%@ %@",NSStringFromSelector(_cmd),decelerate?@"YES":@"NO");
if (!decelerate) {
// the user has just lifted it's finger. Check if we have to update
[self shouldUpdateOnScrollView:scrollView];
}
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"%@",NSStringFromSelector(_cmd));
// the tableView has just stopped. Check if we have to update
[self shouldUpdateOnScrollView:scrollView];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |