ScrollView - 手势识别器 - 垂直滑动

时间:2016-12-13 22:55:26

标签: ios iphone swift xcode scrollview

我有一个UIScrollView在向左或向右滑动时有效,但是我减小了scrollView的大小,所以,现在显示区域没有完全占据superview的框架,并且滑动仅在滚动视图的框架内工作

即使在缩小的滚动视图的水平边界外上下滑动,我也希望能够垂直滚动。

建议我使用手势识别器,但这超出了我目前对iOS的熟悉程度,可以使用更具体的建议或更多指导来开始使用它。

3 个答案:

答案 0 :(得分:2)

有一种更简单的方法,然后使用手势识别器=]

您可以设置滚动视图的超级视图(即BIGGER ...)以将触摸传递到滚动视图。它的工作是M-A-G-I-C-A-L-Y =]

首先,选择将所有内容传递给滚动视图的视图。如果您的父视图已经可以使用它,您可以使用它。否则你应该考虑添加一个你希望接触的大小的新视图。

现在创建一个新类(我将使用swift作为示例)

=INDEX($L$2:$L$4,MATCH($A2&$B2&$C2,$H$2:$H$4&$I$2:$I$4&$J$2:$J$4,0))

尼斯!现在您可以看到我们添加了卷轴的插座。所以使用界面构建器,选择新视图并将其设置为" class TestView: UIView { @IBOutlet weak var Scroller: UIScrollView! override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { let view = super.hitTest(point, with: event) if (view == self) { return Scroller } return view } } "在身份检查器中(或者您将用于自定义类的名称)。

设置完课程后仍然选择了您的视图,请转到连接检查器并连接" TestView"到故事板上的滚动视图。所有连接正确=]

那就是!!没有手势识别器需要!! 新视图会将所有内容传递给滚动视图,并且它会像您在其中平移一样行动=]

在我的回答中,我使用了that answer

编辑:我现在改进了代码,它之前没有按预期工作,现在它仅在需要时捕获,而不是像以前一样在应用程序中的每次触摸

答案 1 :(得分:1)

  1. 搜索名为SwipeGestureRecognizer的组件: enter image description here

  2. 抓住它并将其放在View的顶部(使用层次结构确保 你把它放在它上面,如果你把它放在另一个元素上,这段代码将不起作用):

    enter image description here

  3. 选择层次结构中的SwipeGestureRecognizer之一,然后转到其属性页面。将滑动更改为右侧。

  4. enter image description here

    1. 确保其他识别器具有左侧的滑动属性
    2. enter image description here

      1. 选择UIScrollView并取消选中已启用滚动
      2. enter image description here

        1. detectSwipe()(请参阅下面的源代码)连接到两个识别器。
        2. -

          @IBAction func detectSwipe (_ sender: UISwipeGestureRecognizer) {
              if (currentPage < MAX_PAGE && sender.direction == UISwipeGestureRecognizerDirection.left) {
                  moveScrollView(direction: 1)
              }
              if (currentPage > MIN_PAGE && sender.direction == UISwipeGestureRecognizerDirection.right) {
                  moveScrollView(direction: -1)
              }
          }
          
          
          
          func moveScrollView(direction: Int) {
              currentPage = currentPage + direction
              let point: CGPoint = CGPoint(x: scrollView.frame.size.width * CGFloat(currentPage), y: 0.0)
              scrollView.setContentOffset(point, animated: true)      
          
              // Create a animation to increase the actual icon on screen
              UIView.animate(withDuration: 0.4) {
                  self.images[self.currentPage].transform = CGAffineTransform.init(scaleX: 1.4, y: 1.4)
                  for x in 0 ..< self.images.count {
                      if (x != self.currentPage) {
                          self.images[x].transform = CGAffineTransform.identity
                      }
                  }
              }
          }    
          

          有关更多信息,请参阅https://github.com/alxsnchez/scrollViewSwipeGestureRecognizer

答案 2 :(得分:0)

我没有时间详细解答,但是:

在故事板中,在滚动视图的超级视图上拖动平移手势识别器...将其与视图控制器连接,并在此操作中使用手势识别器中的属性更改滚动视图位置你得到的参数

将操作更改参数类型从Any连接到组合框中的UIPanGestureRecognizer时,

提示

请不要将此答案看作是在您的问题中使用此方法的建议,我不知道这是否是最佳方式,我只是在帮助您试一试