【发布时间】:2015-07-10 08:46:25
【问题描述】:
我有一个表格视图。我使用 CADisplayLink 来调用一些滚动 tableView 的代码。我这样做是因为我想自定义滚动所需的时间,而不是使用 UITableView 方法。
我想要一些放松,所以我在 displayLink 滚动上调用invalidate,然后再做一个 contentOffset 让它看起来不错。我向上滚动 25 点。然后我打电话给NSArray *array = self.tableView.visibleCells,但我在我失效后做最后的滚动之前得到了单元格。例如,我的数组包含数字 1-8,我从底部开始,因此在开始时 tableView 中存在 6、7、8。我按下 UIButton 并滚动 2.1 秒。它停止,调用另一个方法并以另一种方式向后滚动 25 点。我的 tableView 显示
3 4 5
但我的 NSLog 语句显示
2 3 4
问题是滚动后我无法获得正确的索引或单元格。
-(void)scrollRoller{
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(automaticScroll:)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
-(void)automaticScroll:(CADisplayLink*)displayLink
{
[self.tableView setContentOffset:CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y - 5) animated:NO];
double test = self.displayLink.duration *self.displayLink.frameInterval;
self.counter = self.counter + test;
if (self.counter >= 2.1){
[self.displayLink invalidate];
[self.tableView setContentOffset:CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y + 25) animated:YES];
NSArray* cells = self.tableView.visibleCells;
NSLog(@"cells in first method %@", cells);
self.counter = 0.0;
}
【问题讨论】:
-
自定义滚动时间?您是否尝试将
[tableView setContentOffset:CGPointMake(x,y)];包装在[UIView animateWithDuration:];块内? -
@Zhang 是的,我有,但是单元格垃圾使它滚动到一个单元格,但中间单元格不显示。例如,单元格 98-100 将显示,单元格 1-3 也会显示,但单元格 4-97 不会作为 UIAnimation 的滚动。
标签: ios objective-c uitableview