我正在尝试实现一个自定义的选项卡,它可以滚动并且每个选项卡都有分页。为此,我使用了代理方法`scrollViewWillEndDragging:withVelocity:targetContentOffset:`,这个方法工作得很好,但还存在一个问题。
我的分页方式是,如果`contentOffset`接近右侧的选项卡,则`targetContentOffset`会更改为该选项卡的偏移量。左侧也是同样的操作。
问题在于,每当我位于第一个选项卡的左半部分和最后一个选项卡的右侧(滚动视图是水平的)时,它应该转到`ContentOffset`为0和最右边的项目内容偏移量(减去屏幕上显示的选项卡),但它没有这样做。
我使用调试器检查了一下,发现`targetContentOffset->x`确实为0(在第一种情况下-最左边的选项卡的左侧)。因此问题在于UIScrollView没有滚动到那里。我迷失了方向。
这是我实现的代理方法:
我的分页方式是,如果`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