在某些情况下禁用滚动视图右侧
Posted
技术标签:
【中文标题】在某些情况下禁用滚动视图右侧【英文标题】:Disabling the scrollview right side at some conditions 【发布时间】:2015-10-15 06:52:49 【问题描述】:我正在实现具有 10 个自定义视图的水平滚动视图,每个视图具有不同的 UI。当用户向左滚动时,我正在滚动到下一个视图,而在向右滚动到上一个视图时它工作正常,直到现在。在某些情况下,我必须限制向左滚动并仅启用向右滚动。 在下面的方法中,我得到了禁用右滚动的场景
-(void)scrollEnabled:(BOOL)scrollEnable
self.scrollView.scrollEnabled = scrollEnable;
// scrollEnable comes NO at some conditions here i have to disable the right scrolling.
if(!scrollEnable)
// Now i am registering the pan gesture and detecting the right swiping
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(detectRightScroll:)];
[self.panView addGestureRecognizer:panGesture];
- (void) detectRightScroll:(UIPanGestureRecognizer *)gesture
CGPoint translation = [gesture translationInView:gesture.view];
if(translation > 0) // here detecting the right scrolling and changing the scrollview content offset
[scrollView setContentOffset: CGPointMake(scrollView.contentOffset.x-translation, 0)];
view is scrolling but not scrolling like scrooview
我们可以在不注册手势的情况下实现我的要求吗? 我从过去 4 天开始就遇到了这个问题,但无法解决。 任何帮助都将不胜感激。 谢谢。
【问题讨论】:
【参考方案1】:如果方向错误,请尝试重置UIScrollView
的contentOffset
(或禁用该方向)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
if (scrollView.contentOffset.x > stopPosition) // or (scrollView.contentOffset.x < stopPosition)
[scrollView setContentOffset:CGPointMake(stopPosition, 0)];
【讨论】:
您好,感谢您的回复。只是为了澄清,我正在实现水平滚动,但您更新了用于垂直滚动的 y 位置。为什么 抱歉,我没注意到。但我希望你能理解我的回答。我编辑了我的答案。【参考方案2】:尝试使用
scrollViewDidEndDecelerating:(UIScrollView )scrollView and - (void)scrollViewDidEndDragging:(UIScrollView )scrollView willDecelerate:(BOOL)decelerate
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
int xFinal = self.yourScroll.contentOffset.x ;
int viewIndex = xFinal / (yourImageSize);
xFinal = viewIndex * yourImageSize ;
[self.yourScroll setContentOffset:CGPointMake(xFinal, 0) animated:YES];
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
int xFinal = self.yourScroll.contentOffset.x ;
int viewIndex = xFinal / yourImageSize ;
xFinal = viewIndex * yourImageSize;
[self.yourScroll setContentOffset:CGPointMake(xFinal, 0) animated:YES];
您将只能在图像数组计数的限制内滚动。
【讨论】:
您好 ErmineSoft 我会实施您的建议并让您知道谢谢以上是关于在某些情况下禁用滚动视图右侧的主要内容,如果未能解决你的问题,请参考以下文章