我希望我的UIScrollView自然地以某些增量值(对应于水平滚动UIScrollView的宽度的每50点)滑行结束,我定制了scrollViewWillEndDragging,就像建议的那样(如建议的那样,但没有在这里的答案中详细描述,以逐步递增的方式滚动水平UIScrollView?):
- (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;
}
}但是,我不确定这是否真的以特定的增量停止了视图,我还注意到效果是不对称的。虽然我的滚动运动/速度/等等是相同的,但向右滚动比向左滚动要少得多。向右滚动更快,更突然。有一个视频 这里。为什么这种行为是不对称的,我如何改变它呢?
我之所以不以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];
}发布于 2015-07-25 16:46:15
您可以将滚动视图上的pagingEnabled设置为true,而不是实现这些委托方法,从而免费获得此行为。启用分页时,滚动视图将在结束拖动时自动切换到最近的“页”,其中页面宽度等于滚动视图的宽度。
根据您的视频,看起来滚动视图中的项小于滚动视图本身的宽度。要使用分页,您必须执行以下操作:
scrollView.clipsToBounds设置为false,以便滚动视图在其更小的边界之外绘制子视图。scrollView.pagingEnabled设置为true,这样滚动视图将带分页滚动。此时,分页工作,但无法将滚动视图拖出其界限。要使其工作,您需要将滚动视图嵌入到一个将触摸事件转发到它的更大视图中。
这个类接收它接收到的所有触摸事件,并将它们发送到它的targetView属性。DJK是我为类名设置的随机前缀。
@interface DJKTouchForwardingView : UIView
/** The view to which touch events should be forwarded. */
@property (weak, nonatomic) UIView *targetView;
@end
@implementation DJKTouchForwardingView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *child = nil;
if ((child = [super hitTest:point withEvent:event]) == self) {
return self.targetView;
}
return child;
}
@endtargetView属性。您的滚动视图现在将在触摸转发视图的范围内滚动,并将切换到50个单元页面。
https://stackoverflow.com/questions/31596096
复制相似问题