【发布时间】:2015-07-23 19:08:23
【问题描述】:
我希望我的UIScrollView 在某些增量值处自然滑动到结尾,对应于水平滚动UIScrollView 的每 50 个宽度点为此,我自定义了 scrollViewWillEndDragging,就像这样(推荐,但是此处未在答案中详细描述Scrolling a horizontal UIScrollView in stepped increments?):
- (void) scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
if(fmodf(targetContentOffset->x, 50.0)){
int roundingNumber1 = 50;
CGFloat newOffset = roundingNumber1 * floor(((scrollView.contentOffset.x)/roundingNumber1)+0.5);
targetContentOffset->x = newOffset;
}
}
但是,我不确定这实际上是在以特定增量停止视图,而且我还注意到效果是不对称的。 虽然我的滚动动作/速度/等是相同的,但向右滚动远不如向左滚动流畅。向右滚动会更快更突然地停止。有一个视频here。为什么这种行为是不对称的,我该如何改变它?
我细化滚动不会以 50 为增量停止的原因是我在滚动视图下方还有一个 UILabel,它由其他委托函数更新以显示偏移量。 滚动完成时,它显示的值很少接近 50。这是因为滚动没有增加到 50 的值还是因为我没有在正确的时间更新?
感谢您的建议。
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
if(abs(self.lastOffset - scrollView.contentOffset.x) > 49){
CGFloat newNumber = scrollView.contentOffset.x;
self.numberProperty.text = [NSString stringWithFormat:@"%.00f", scrollView.contentOffset.x];
self.lastOffset = scrollView.contentOffset.x;
[self.view setNeedsDisplay];
}
}
- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
self.numberProperty.text = [NSString stringWithFormat:@"%.00f", scrollView.contentOffset.x];
}
【问题讨论】:
-
在你的委托方法中 - (void) scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 在新的 '*targetContentOffset' 中替换 'contentOffset'目标偏移计算。
标签: ios objective-c uiscrollview uiscrollviewdelegate