我在屏幕上有一个UISlider,我需要能够检测到用户何时停止触摸它。 (所以我可以淡化一些元素)。
我尝试过使用:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
但是当结束滑块上的触摸时,这不起作用。
答案 0 :(得分:19)
您可以使用两个控件事件检测触摸何时结束;尝试
[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];
答案 1 :(得分:6)
不是使用touchesEnded:
(不应该用于此目的),而是将操作附加到UISlider
的{{1}}事件并设置UIControlEventValueChanged
continuous
到UISlider
的属性,因此当用户完成选择值时会触发该事件。
NO
答案 2 :(得分:2)
我什么都无法捕捉到触摸的开始和结束,但是在RTFD处理后,我想出了可以同时完成这两个操作的东西。
@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
,并且滑块值会更新。