Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Ios 使用快速滑动手势更改UISlider值_Ios_Swift_Uigesturerecognizer_Uislider - Fatal编程技术网

Ios 使用快速滑动手势更改UISlider值

Ios 使用快速滑动手势更改UISlider值,ios,swift,uigesturerecognizer,uislider,Ios,Swift,Uigesturerecognizer,Uislider,我有一个带滑动手势的UIView let swipeUpGesture = UISwipeGestureRecognizer(target: self, action: #selector(NextStepCaptureVC.handleSwipeUp(gesture:))) swipeUpGesture.direction = .up view.addGestureRecognizer(swipeUpGesture) func handleSwipeUp(g

我有一个带滑动手势的UIView

 let swipeUpGesture = UISwipeGestureRecognizer(target: self, action: #selector(NextStepCaptureVC.handleSwipeUp(gesture:)))
        swipeUpGesture.direction = .up
        view.addGestureRecognizer(swipeUpGesture)

func handleSwipeUp(gesture: UISwipeGestureRecognizer) {
        print("Swipe Up")
        heightSlider.setValue(20, animated: true)
    }

当我尝试更改该值时,它会工作,但该值会从0跳到20。我希望值在刷卡时不断更改。我怎么做

您不需要
uisweegestureerecognizer
,您需要的是
uipangestureerecognizer
。刷卡是一次性的动作


表示“刷卡是一个离散的手势,因此每个手势只发送一次关联的操作消息。”

如果不需要
UIWipegestureRecognitizer
,则需要
UIPangestureRecognitizer
。刷卡是一次性的动作


表示“刷卡是一种不连续的手势,因此每个手势只发送一次相关的动作消息。”

您设置了从手势识别器到代码的主动作(您可以使用interface builder进行此设置)


祝你好运!=]

您设置了一个从手势识别器到代码的主动作(您可以使用interface builder进行此设置)


祝你好运!=]

从您的代码判断,您似乎试图将屏幕上的“上下平移”转换为
UISlider
值更改

正如其他人已经提到的,第一件事是将您的
uisweegestureerecognizer
更改为
uipangestureerecognizer

let pan = UIPanGestureRecognizer(target: self, action: #selector(pan(gesture:))) 
view.addGestureRecognizer(pan)
然后在平移函数中,需要根据用户平移的程度更新滑块值

func pan(gesture: UIPanGestureRecognizer) {
    // The amount of movement up/down since last change in slider
    let yTranslation = gesture.translation(in: gesture.view).y

    // The slide distance needed to equal one value in the slider
    let tolerance: CGFloat = 5

    if abs(yTranslation) >= tolerance {
        let newValue = heightSlider.value + Float(yTranslation / tolerance)
        heightSlider.setValue(newValue, animated: true)

        // Reset the overall translation within the view
        gesture.setTranslation(.zero, in: gesture.view)
    }
}

只需调整
公差
变量,让用户多/少滑动以调整滑块值。

从您的代码判断,您似乎试图将屏幕上的“上下平移”转换为
UISlider
值更改

正如其他人已经提到的,第一件事是将您的
uisweegestureerecognizer
更改为
uipangestureerecognizer

let pan = UIPanGestureRecognizer(target: self, action: #selector(pan(gesture:))) 
view.addGestureRecognizer(pan)
然后在平移函数中,需要根据用户平移的程度更新滑块值

func pan(gesture: UIPanGestureRecognizer) {
    // The amount of movement up/down since last change in slider
    let yTranslation = gesture.translation(in: gesture.view).y

    // The slide distance needed to equal one value in the slider
    let tolerance: CGFloat = 5

    if abs(yTranslation) >= tolerance {
        let newValue = heightSlider.value + Float(yTranslation / tolerance)
        heightSlider.setValue(newValue, animated: true)

        // Reset the overall translation within the view
        gesture.setTranslation(.zero, in: gesture.view)
    }
}


只需调整
公差
变量,让用户多/少滑动以调整滑块值。

这是真的,谢谢。但是我如何不断地改变这个值呢?我希望滑块能够实时设置动画。使用
uipangestureerecognizer
。您可以使用代理来获取触摸,并通过状态开始/结束来监视它们/progress@Yitschak你能给我一个使用uislider的代码示例吗?谢谢,我不知道你的意思。你在用滑环吗?如果是这样,你根本不需要任何手势识别器——所有的工作都由UISlider完成。如果使用UIView并创建自定义滑块(不是UISlider),则使用PangestureRecognitor。我没有示例代码,但是当用户移动手指时,会不断调用PangestureRecognitor目标的方法。读吧,这是真的,谢谢。但是我如何不断地改变这个值呢?我希望滑块能够实时设置动画。使用
uipangestureerecognizer
。您可以使用代理来获取触摸,并通过状态开始/结束来监视它们/progress@Yitschak你能给我一个使用uislider的代码示例吗?谢谢,我不知道你的意思。你在用滑环吗?如果是这样,你根本不需要任何手势识别器——所有的工作都由UISlider完成。如果使用UIView并创建自定义滑块(不是UISlider),则使用PangestureRecognitor。我没有示例代码,但是当用户移动手指时,会不断调用PangestureRecognitor目标的方法。阅读。为什么要使用视图并根据视图的滑动来更改滑块?您可以通过滑动滑块直接更改它!!!我知道@KetanParmar。为什么要使用视图并根据视图的滑动来更改滑块?您可以通过滑动滑块直接更改它!!!我知道@KetanParmar。你的答案有效,但当我向下平移时,值会发生变化。我怎样才能使它工作时,我总结了?谢谢@DavidMy answer对上下平移都有效。如果要反转滑块的移动方式。。。将
let newValue=heightSlider.value+Float(ytransation/tolerance)
更改为
let newValue=heightSlider.value-Float(ytransation/tolerance)
@KerbyJean弄清楚如何更改滑块的方向应该不会太难。我鼓励您确保您真正了解我提供的代码的所有内容–尽量不要只是复制和粘贴:)啊哈,我是一个初学者,但我会尝试:)谢谢如果我的代码为您提供了您想要的解决方案,那么请将其升级并标记为正确答案:)您的答案有效,但是,向下平移时,值会发生变化。我怎样才能使它工作时,我总结了?谢谢@DavidMy answer对上下平移都有效。如果要反转滑块的移动方式。。。将
let newValue=heightSlider.value+Float(ytransation/tolerance)
更改为
let newValue=heightSlider.value-Float(ytransation/tolerance)
@KerbyJean弄清楚如何更改滑块的方向应该不会太难。我鼓励您确保您真正了解我提供的代码的所有内容-不要只是复制和粘贴:)啊哈,我是一个初学者,但我会尝试:)谢谢如果我的代码为您提供了您想要的解决方案,请将其升级并标记为正确答案:)