UIScrollView 方向来自 scrollViewWillBeginDecelerating

Posted

技术标签:

【中文标题】UIScrollView 方向来自 scrollViewWillBeginDecelerating【英文标题】:UIScrollView direction from scrollViewWillBeginDecelerating 【发布时间】:2011-05-06 09:01:42 【问题描述】:

是否可以在方法中检索UIScrollView滚动到的方向;

-(void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

如果可以,如何实现?

【问题讨论】:

【参考方案1】:

你可以试试这样的:

- (void)scrollViewDidScroll:(UIScrollView *)sender 

  xCoord = scrollview.contentOffset.x;


-(void) scrollViewWillBeginDecelerating:(UIScrollView *)sender 


   if (xCoord > scrollView.contentOffset.x) 
     //RIGHT
    else if (xCoord < scrollView.contentOffset.x) 
     //LEFT
   


保存开始滚动时scrollViews contentOffset的x坐标,然后在scrollViewWillBeginDecelerating中比较

【讨论】:

Jamie 的回答在启用分页并且用户轻弹并且 UIScrollView 弹回原始位置的情况下不起作用。在这种情况下,contentOffset 有时会如下所示:15,20,18,15,10,...所以您计算的初始方向将是错误的。【参考方案2】:

在分页的情况下试试这个

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

    _xCoord = scrollView.contentOffset.x;


-(void)scrollViewDidScroll:(UIScrollView *)scrollView

    if (_xCoord > scrollView.contentOffset.x) 
      //right
     else if (_xCoord < scrollView.contentOffset.x) 
        //LEFT

    


【讨论】:

【参考方案3】:

不直接回答问题,但可能对某些人有用——检索UIScrollView 将减速的方向:

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) 
  let point = scrollView.panGestureRecognizer.translation(in: scrollView)
  if point.x < 0 
    // Will decelerate to the right
  else if point.x > 0
    // Will decelerate to the left
  
 

【讨论】:

以上是关于UIScrollView 方向来自 scrollViewWillBeginDecelerating的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView - 添加子视图,使其水平和垂直居中

如何在 UIScrollview 和动画上设置优先级

将选择器添加到动态添加的 UIScrollView 视图上的按钮

UIScrollview 停留在不正确的 contentOffset(-20 px,而不是 0px)

带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动

对于 UIScrollview,我如何使用自己的 panGestureRecognizer 但允许 scrollView 使用其识别器进行反弹?