dvi*_*ira 28 uiscrollview uiscrollviewdelegate ios ios5
我正在尝试实现一个可滚动的自定义标签栏,并在每个标签栏项目上进行分页.因为我正在使用委托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;
}
Run Code Online (Sandbox Code Playgroud)
这是解释我想要做什么的图表.
|-------|-------|-------|-------|-------|-------|-------|
| | | | | | | |
| | | | | | | |
|_______|_______|_______|_______|_______|_______|_______|
|_______________________________________|
where it is and i scroll it to the left
<----|
|_______________________________________|
where it would stop
|_______________________________________|
where i want it to stop
Run Code Online (Sandbox Code Playgroud)
dvi*_*ira 15
这似乎是一个已知的问题.经过一些调查并与其他人交谈后,有人认为这可能是一个错误,结果证明是正确的.我向苹果公司报告过,它被标记为重复但仍然是开放的.只是回答那些有同样问题的人.我像Big Papoo建议的那样解决它,使用接近我想要的偏移(0.1似乎这样做).右端也一样.
我尝试将最终偏移量设置为稍微偏离零的内容或Big Papoo建议的内容大小,但注意到这消除了过度滚动反弹.我的解决方案是检查原始的targetContentOffset以查看它是否等于零或者是contentSize,如果它是:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
float expectedOffset = targetContentOffset->x;
if (expectedOffset == 0 || expectedOffset == scrollView.contentSize.width) return; // Scroll view will bounce so leave the targetContentOffset.
float targetOffset = [self roundedOffset:expectedOffset]; // Round your offset.
// Adjust the offset to make sure it works.
if (targetOffset == 0) targetOffset = 1;
else if (targetOffset == SCROLLVIEW_WIDTH) targetOffset = SCROLLVIEW_WIDTH - 1;
targetContentOffset->x = targetOffset;
}
Run Code Online (Sandbox Code Playgroud)
你当然scrollViewDidEndDecelerating:可以用来移动1点的scrollview.
| 归档时间: |
|
| 查看次数: |
16983 次 |
| 最近记录: |