检测UISlider上的触摸?

And*_*tin 12 xcode cocoa-touch objective-c uislider ios

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

我尝试过使用:

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

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

小智 19

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

[slider addTarget:self action:@selector(touchEnded:) 
                       forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

要么

[slider addTarget:self action:@selector(touchEnded:) 
                       forControlEvents:UIControlEventTouchUpOutside];
Run Code Online (Sandbox Code Playgroud)

如果要检测两种类型的touchesEnd事件,请使用

[slider addTarget:self action:@selector(touchEnded:) 
   forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
Run Code Online (Sandbox Code Playgroud)


Eva*_*ski 6

而不是使用的touchesEnded:(这不应该反正用于此目的),连接到一个动作UISliderUIControlEventValueChanged情况下,设置continuous的属性UISliderNO,所以当用户完成选择一个值时就会触发.

mySlider.continuous = NO;
[mySlider addTarget:self
          action:@selector(myMethodThatFadesObjects) 
          forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的想法,但我已经使用`UIControlEventValueChanged`获取UISlider所在位置的实时更新,所以如果我将`continuous`设置为no,我就无法做到. (2认同)

Adr*_*ian 6

我无法获得任何东西来捕获触摸的开始和结束,但在 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)
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

sliderTouchBegan()sliderTouchEnded()只是我编写的方法,用于在触摸开始和结束时处理动画。如果不是开始或结束,则为 a,default并且滑块值会更新。