我在屏幕上有一个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
事件上,并将 UISlider
的 continuous
属性设置为 NO
,这样当用户完成选择值时,事件将被触发。
mySlider.continuous = NO;
[mySlider addTarget:self
action:@selector(myMethodThatFadesObjects)
forControlEvents:UIControlEventValueChanged];
UIControlEventValueChanged
来获取UISlider的实时更新,所以如果我将continuous
设置为否,我就无法这样做。 - Andrew Martin我无法找到任何东西来捕获触摸的开始和结束,但是通过阅读文档,我想出了一些可以同时实现这两个功能的方法。
@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()
只是我编写的方法,用于处理触摸开始和结束时的动画效果。如果不是开始或结束,那么它就是一个默认
值,并更新滑块的值。
UIControlEventTouchUpInside
或UIControlEventTouchUpOutside
的目标动作(target+action)? - user529758