Ios 使用快速滑动手势更改UISlider值
我有一个带滑动手势的UIViewIos 使用快速滑动手势更改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
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弄清楚如何更改滑块的方向应该不会太难。我鼓励您确保您真正了解我提供的代码的所有内容-不要只是复制和粘贴:)啊哈,我是一个初学者,但我会尝试:)谢谢如果我的代码为您提供了您想要的解决方案,请将其升级并标记为正确答案:)