使用自定义手势识别器来触发UIScrollView的滚动

时间:2014-12-04 10:25:21

标签: ios uiscrollview gesture gesture-recognition

我找不到替换UIPanGestureRecognizer的默认UIScrollView的方法。但是我需要调整导致UIScrollView滚动的手势。

我只想识别速度更快的平底锅。另外,在移动一定距离(确保它不是初始慢动作)之后,要测量手指的速度。据我所知,使用UScrollView的默认UIPanGestureRecognizer无法实现这一目标。

如何用我自己的识别器替换它?

3 个答案:

答案 0 :(得分:1)

更改底层手势识别器是错误的方法。您可以通过实施gestureRecognizer(_:shouldReceiveTouch:)UIGestureRecognizerDelegate方法来完成您想要做的事。

只要您想要自定义的滚动视图不是UICollectionView,UITableView或类似类的一部分,您就可以设置手势识别器的委托。在委托中,您可以使用UIPanGestureRecognizer的velocityInView(_:)方法来决定是否允许手势识别器触发滚动。

答案 1 :(得分:1)

您也可以在这里实现touchesMoved方法。您可以在触摸之间进行比较以检查速度。像这样的东西,但它是伪代码

global firstpoint;
global secondpoint

override func touchesBegan(touches: NSSet, withEvent event: UIEvent){

for touch: AnyObject in touches {
        let firstpoint = (touch as UITouch).locationInNode(self);

}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {

    for touch: AnyObject in touches {
        let secondpoint = (touch as UITouch).locationInNode(self);
    }
    let diffx = secondpoint - firstpoint;
    if diffx > "some value you choose for velocity"{
         "do some action that you want";
    }
    else {
        firstpoint = secondpoint;
    }
}   

这将为您提供一些可用于提供进一步操作的动作的速度。

答案 2 :(得分:0)

您可以尝试在scrollView上放置一个清晰的UIView,然后可以向其添加UIPanGestureRecognizer。然后,您可以为该GestureRecognizer设置一个选择器,然后可以告诉scrollView滚动。但是,您将负责确定每个高速盘的滚动距离。