我在屏幕上有一个 UISlider,我需要能够检测到用户何时停止触摸它。(所以我可以淡化一些元素)。
我试过使用:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
但这在结束触摸滑块时不起作用。
我在屏幕上有一个 UISlider,我需要能够检测到用户何时停止触摸它。(所以我可以淡化一些元素)。
我试过使用:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
但这在结束触摸滑块时不起作用。
您可以使用两个控制事件来检测触摸何时结束;尝试
[slider addTarget:self action:@selector(touchEnded:)
forControlEvents:UIControlEventTouchUpInside];
[slider addTarget:self action:@selector(touchEnded:)
forControlEvents:UIControlEventTouchUpOutside];
如果要检测这两种类型的touchesEnd
事件,请使用
[slider addTarget:self action:@selector(touchEnded:)
forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
而不是使用touchesEnded:
(无论如何都不应该用于此目的),将操作附加到UISlider
'UIControlEventValueChanged
事件并设置to的continuous
属性,因此当用户完成选择值时将触发该事件。UISlider
NO
mySlider.continuous = NO;
[mySlider addTarget:self
action:@selector(myMethodThatFadesObjects)
forControlEvents:UIControlEventValueChanged];
我无法捕捉到触摸的开始和结束,但是在 RTFD-ing 之后,我想出了一些可以同时兼顾的东西。
@IBAction func sliderAction(_ sender: UISlider, forEvent event: UIEvent) {
if let touchEvent = event.allTouches?.first {
switch touchEvent.phase {
case .began:
print("touches began")
sliderTouchBegan()
case .ended:
print("touches ended")
sliderTouchEnded()
default:
delegate?.sliderValueUpdated(sender.value)
}
}
}
sliderTouchBegan()
并且sliderTouchEnded()
只是我编写的在触摸开始和结束时处理动画的方法。如果它不是一个开始或结束,它是一个default
并且滑块值更新。