2016-12-13 150 views
2

我有一个UIScrollView在向左或向右滑动时工作,但是我缩小了scrollView的大小,所以现在显示区域不会完全占据superview的框架,并且只能滑动在滚动视图的框架内。ScrollView - 手势识别器 - 垂直滑动

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

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

+0

见http://stackoverflow.com/a/43328905/5173807 – 9it3e1

回答

2

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

您可以设置滚动视图的超级视图(这是较大的...)以将触摸传递给滚动视图。它正在工作M-A-G-I-C-A-L-Y =]

首先,选择将所有触摸传递给滚动视图的视图。如果你的父视图已经可以使用它。否则你应该考虑添加一个新的视图,你想要的大小会触及到。

现在创建一个新的类(我将使用的例如SWIFT)

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”。

当您设置了课程并且您的视图仍处于选中状态后,请转至连接检查员并将“Scroller”连接到故事板上的滚动视图。所有正确连接=]

就是这样!不需要手势识别器! 新观点将通过一切的触摸滚动视图,它会表现得就像你在它平移=]

在我的答案我用that answer

编辑:我现在改进了代码,它不工作像以前预期的,现在它捕获只在需要,而不是在应用程序中每一个接触像以前

+0

它的工作。但是,你可以用手势识别器来做吗? – mumu

+0

我试过......我可以尝试更多。但为什么? – Yitzchak

+0

教练要求使用手势来做到这一点。这就是为什么。 – mumu

0

我没有时间详细回答,但:

在故事板拖动滚动视图的上海华盈泛手势识别...连接它的行动,您的视图控制器并在行动改变滚动视图位置通过使用来自你得到的参数

提示手势识别属性:在组合框中从Any动作变化参数类型连接到UIPanGestureRecognizer

请不要看到这个答案作为建议在你的问题中使用这种方法,我不知道这是最好的方式,我只是帮你试试

+0

嘿,感谢您的answere。当我回到家时,我会尝试一下,如果它有效,请发表评论。 – Glatteisen

+0

它帮助你? – Yitzchak

+0

我试过,但我没有时间再次评论这一点,对不起。 我试着理解你所说的话,并且据我所知,我编码了。现在,我真的不知道手势识别器属性是什么,所以我只是把这段代码放在ViewController.swift中:@IBAction func ScrollOver(_ sender:UIPanGestureRecognizer){ scrollView.frame.size.width = 320 } 正如我所说的scrollView比superview小,但scrollView有一个颜色,所以这个额外的代码我已经写了scrollView大小增长和它的颜色,所以它有点不是我想要做的。 – Glatteisen

1
  1. 搜索一个组件调用时SwipeGestureRecognizerenter image description here

  2. 抓住它,并把它在视图的顶部(使用层次结构,以确保 它掉在地上就可以了,如果你删除它的另一个元素这个代码将无法正常工作的):

    enter image description here

  3. 从层次结构中选择一个SwipeGestureRecognizer并转到其属性页。将滑动更改为右侧。

enter image description here

  • 确保其他识别器具有滑动属性到左
  • enter image description here

  • 选择UIScrollView并取消选中滚动启用
  • enter image description here

  • 连接detectSwipe()(见下文源代码)到两个识别器。
  • -

    @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更多