Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 停止UIPAngestureRecognitor移动超过阈值_Swift_Uigesturerecognizer_Uipangesturerecognizer_Translate Animation - Fatal编程技术网

Swift 停止UIPAngestureRecognitor移动超过阈值

Swift 停止UIPAngestureRecognitor移动超过阈值,swift,uigesturerecognizer,uipangesturerecognizer,translate-animation,Swift,Uigesturerecognizer,Uipangesturerecognizer,Translate Animation,我有一个手势是在我的观点之一。这个手势不会让球倒退,也不会阻止球越过球门中心 如果用户拖过球门到绿色的一边,它将停留在中间,但一旦他们开始拖回按钮,它将后退。即使用户的手指不在XButton视图上 此处的代码示例: let xGestureDrag = UIPanGestureRecognizer(target: self, action: #selector(AdViewPageVC.xButtonWasDragged(_:))) @objc func xButtonWasDragged(_

我有一个手势是在我的观点之一。这个手势不会让球倒退,也不会阻止球越过球门中心

如果用户拖过球门到绿色的一边,它将停留在中间,但一旦他们开始拖回按钮,它将后退。即使用户的手指不在XButton视图上

此处的代码示例:

let xGestureDrag = UIPanGestureRecognizer(target: self, action: #selector(AdViewPageVC.xButtonWasDragged(_:)))

@objc func xButtonWasDragged(_ sender: UIPanGestureRecognizer) {

    if sender.state == UIGestureRecognizerState.began || sender.state == UIGestureRecognizerState.changed {
        self.view.bringSubview(toFront: xButton)
        let translation = sender.translation(in: self.view)
        print(translation.x)
        xButton.center = CGPoint(x: xButton.center.x + translation.x, y: xButton.center.y)
        if xButton.center.x < startingPointxBtn {
            xButton.center.x = startingPointxBtn
        } else if xButton.center.x > largeCircle.center.x {
            xButton.center.x = largeCircle.center.x
        }
        sender.setTranslation(CGPoint.zero, in: self.view)
    } else if sender.state == UIGestureRecognizerState.ended {
        if largeCircle.center.x - xButton.center.x <= 35.0 {
            xButton.center = largeCircle.center
        } else {
            xButton.center.x = startingPointxBtn
        }
    }

}
让xGestureDrag=UIPangestureRecognitor(目标:self,操作:#选择器(AdViewPageVC.xButtonWasDraged(:))
@objc func XBUTTONWASTRADG(uu发送方:UIPANGESTURE识别器){
如果sender.state==UIGestureRecognitizerState.Start | | sender.state==UIGestureRecognitizerState.changed{
self.view.bringSubview(toFront:xButton)
让translation=sender.translation(在:self.view中)
打印(翻译.x)
xButton.center=CGPoint(x:xButton.center.x+translation.x,y:xButton.center.y)
如果xButton.center.x<起始点xbtn{
xButton.center.x=起始点xbtn
}否则,如果xButton.center.x>largeCircle.center.x{
xButton.center.x=大圆圈.center.x
}
sender.setTranslation(CGPoint.zero,in:self.view)
}如果sender.state==UIgestureRecognitizerState.ended,则为else{

如果largeCircle.center.x-xButton.center.x我已经实现了一个答案。对于任何寻找这种行为的人,你都可以得到我的解决方案

当我们滑动视图时,我使用了一个变量来保存翻译的距离计数器

使用此选项进行一些if检查,您将获得所需的确切行为

新行为的视频示例(拖过目标、拖到开始后、快速开始和快速目标):

代码如下:

@objc func xButtonWasDragged(_ sender: UIPanGestureRecognizer) {
    if sender.state == UIGestureRecognizerState.began || sender.state == UIGestureRecognizerState.changed {
        self.view.bringSubview(toFront: xButton)
        let translation = sender.translation(in: self.view)
        //Move the view
        xButton.center = CGPoint(x: xButton.center.x + translation.x, y: xButton.center.y)
        distanceCounter += translation.x
        //if moved left dont add to our distance counter
        if distanceCounter < 0 {
            distanceCounter = 0
        }
        // prevent button from moving left from start
        if xButton.center.x < startingPointxBtn {
            xButton.center.x = startingPointxBtn
        } else if xButton.center.x > largeCircle.center.x && distanceCounter > xBtnDistance {
            xButton.center.x = largeCircle.center.x
            distanceCounter = xBtnDistance
            // If we hit our target center and go over it in our distance counter
            // make our distance be reached and forced to the center
        } else {
            // set the translation
            sender.setTranslation(CGPoint.zero, in: self.view)
        }
    } else if sender.state == UIGestureRecognizerState.ended {
        // If you let go of button within a distance, snap to center
        if largeCircle.center.x - xButton.center.x <= 35.0 {
            xButton.center = largeCircle.center
        } else {
            // if none of these conditions meet make it snap to start
            xButton.center.x = startingPointxBtn
        }
        // reset our counter to always begin with zero
        distanceCounter = 0
    }
}
@objc func xbuttonwasradg(uu发送方:UIPangestureRecognitizer){
如果sender.state==UIGestureRecognitizerState.Start | | sender.state==UIGestureRecognitizerState.changed{
self.view.bringSubview(toFront:xButton)
让translation=sender.translation(在:self.view中)
//移动视图
xButton.center=CGPoint(x:xButton.center.x+translation.x,y:xButton.center.y)
距离计数器+=平移.x
//如果向左移动,不要添加到我们的距离计数器
如果距离计数器<0{
距离计数器=0
}
//防止按钮从开始向左移动
如果xButton.center.x<起始点xbtn{
xButton.center.x=起始点xbtn
}否则,如果xButton.center.x>largeCircle.center.x&&distance counter>xbtn距离{
xButton.center.x=大圆圈.center.x
距离计数器=xbtn距离
//如果我们击中目标中心并在距离计数器中越过它
//使我们的距离达到并被强迫到中心
}否则{
//设置翻译
sender.setTranslation(CGPoint.zero,in:self.view)
}
}如果sender.state==UIgestureRecognitizerState.ended,则为else{
//若在一段距离内松开按钮,则捕捉到中心
如果较大的圆.center.x-xButton.center.x