在UISlider检测触摸?(Detecting touches on a UISlider?)

2019-06-25 09:42发布

我有一个在屏幕上UISlider,我需要能够在用户停止触摸它来检测。 (所以我可以褪色一些元件的距离)。

我已经尝试使用:

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

但在滑块结束触摸时,并没有工作。

Answer 1:

当触摸结束使用两个控制事件可以检测; 尝试

[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];


Answer 2:

而不是使用的touchesEnded:这不应该被用于此目的无论如何),连接到一个动作UISliderUIControlEventValueChanged事件,并设置continuous的财产UISliderNO ,这样当用户完成选择一个事件将触发值。

mySlider.continuous = NO;
[mySlider addTarget:self
          action:@selector(myMethodThatFadesObjects) 
          forControlEvents:UIControlEventValueChanged];


Answer 3:

我无法得到任何同时捕获的开始和触摸结束,但在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和滑块值的更新。



文章来源: Detecting touches on a UISlider?