我正在尝试实现一个可滚动的自定义标签栏,并且在每个标签栏项目上都有分页。为此,我正在使用委托 scrollViewWillEndDragging:withVelocity:targetContentOffset: 它完美地解决了一个问题。
我的分页工作方式是,如果 contentOffset 靠近正确的项目,则 targetContentOffset 会更改为该项目的偏移量。左侧也一样。
问题是,每当我在第一个项目的左半部分和最后一个项目的右侧(滚动视图水平工作)它应该转到 ContentOffset 0 和最右边项目的内容偏移量(减去那些屏幕),但事实并非如此。
我检查了调试器,targetContentOffset->x 确实为 0(在第一种情况下 - 最左侧项目的左侧)。所以问题是 UIScrollView 没有在那里滚动。我迷路了。
这是我实现的委托:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset{
NSInteger index = lrintf(targetContentOffset->x/self.tabWidth);
targetContentOffset->x = index * self.tabWidth;
}
这是解释我想要做什么的图表。
|-------|-------|-------|-------|-------|-------|-------|
| | | | | | | |
| | | | | | | |
|_______|_______|_______|_______|_______|_______|_______|
|_______________________________________|
where it is and i scroll it to the left
<----|
|_______________________________________|
where it would stop
|_______________________________________|
where i want it to stop