限制UIScrollView中的滚动区域
我有一个滚动相当大的UIView的UIScrollView。限制UIScrollView中的滚动区域
在某些时候,我想限制用户可以滚动的区域。例如,我可能只想让他们查看视图的底部四分之一。
我能够通过重写scrollViewDidScroll来限制区域,然后在视图滚动得太远的情况下调用setContentOffset。但是这样我就无法像UIScrollView在UIView界限以上滚动时那样顺畅地反弹。
是否有更好的方法来限制UIScrollView中的可滚动区域?
我会将滚动视图的contentSize属性更改为您希望用户能够滚动的区域的大小,并调整子视图的frame.origin,例如您想要的左上边界出现在( 0,0)相对于滚动视图。例如,如果您的视图高800点,并且想要显示底部四分之一,请将contentSize的高度设置为200,并将view.frame.origin的y分量设置为-600。
我发现了一些适合我的东西。它让你滚动到0,0点,但没有进一步的:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.x <= -1) {
[scrollView setScrollEnabled:NO];
[self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
[scrollView setScrollEnabled:YES];
}
}
你可以为顶部,底部或右(x或y)做同样的
该方法的问题在于,您失去了“反弹” - 您在该区域之外滚动并轻轻滚动当你放开时,它会回复。 – 2014-07-31 14:36:59
垃圾你是对的,没有正确阅读。不过,也许这可以帮助别人。 – Yoko 2014-07-31 15:07:38
另一种方法是重写UIScrollView
的方法:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
。
返回YES
将允许用户滚动。退回NO
不会。
注:这将禁用所有触摸到UIScrollView
是pointInside
回报NO
里面嵌入的任何意见。如果您不想滚动的区域没有任何交互,这很有用。
本示例只允许UIScrollView
到当用户滚动通过UITableView
滚动。 (A UITableView
和两个UIViews
是在UIScrollView
内嵌入)
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView *subview in self.subviews) {
if ([subview pointInside:[self convertPoint:point toView:subview] withEvent:event] && ![subview isKindOfClass:[UITableView class]]) {
return NO;
}
}
return YES;
}
你的回答是恰到好处的提示,我需要解决类似的问题,我有。基本上,uiscrollview.frame.size和uiscrollview.contentsize之间的差异就成为您允许的可滚动部分。您可以使用uiscrollview中的uiview进行游戏,只需使用uiview.frame和uiview.size即可获得所需的效果。一旦你明白了这一点,生活就是美好的。快乐滚动! :) – HM1 2012-03-24 01:23:38
这里是封装类似逻辑的解决方案的示例: https://github.com/ealeksandrov/EARestrictedScrollView – 2016-04-25 18:29:28