检测UISlider上的触摸?

时间:2012-06-10 18:18:06

标签: objective-c ios xcode cocoa-touch uislider

我在屏幕上有一个UISlider,我需要能够检测到用户何时停止触摸它。 (所以我可以淡化一些元素)。

我尝试过使用:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

但是当结束滑块上的触摸时,这不起作用。

3 个答案:

答案 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 continuousUISlider的属性,因此当用户完成选择值时会触发该事件。

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,并且滑块值会更新。