14

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

我试过使用:

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

但这在结束触摸滑块时不起作用。

4

3 回答 3

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];
于 2012-06-10T18:46:40.210 回答
6

而不是使用touchesEnded:(无论如何都不应该用于此目的),将操作附加到UISlider'UIControlEventValueChanged事件并设置to的continuous属性,因此当用户完成选择值时将触发该事件。UISliderNO

mySlider.continuous = NO;
[mySlider addTarget:self
          action:@selector(myMethodThatFadesObjects) 
          forControlEvents:UIControlEventValueChanged];
于 2012-06-10T18:25:38.743 回答
5

我无法捕捉到触摸的开始和结束,但是在 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并且滑块值更新。

于 2018-07-05T21:21:45.950 回答