UISlider事件

end*_*nda 16 iphone events objective-c uislider

我正在使用UISlider,它会自动更新,除非用户触摸滑块按钮.因此我在NSTimer自动更新的功能中执行此操作:

if (!isSliderTouched) {
    [progressSlider setValue: progressValue];
}
Run Code Online (Sandbox Code Playgroud)

当用户松开手指时,如何跟踪此事件的结束.只要用户与此控件交互,我想设置isSliderTouched.

编辑:这应该是情节:

  1. 用户开始拖动/触摸UISlider => isSliderTouched = YES
  2. 用户释放/取消UISlider => isSliderTouched = NO

方案:

UIControlEventTouchDown
UIControlEventTouchUpInside
[progressSlider addTarget:self action:@selector(sliderMoveStart) forControlEvents:UIControlEventTouchDown];
Run Code Online (Sandbox Code Playgroud)

欢呼声

pwc*_*pwc 14

您可以使用:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

当检测到touchDowntouchUp事件发生.您可以相应地设置标志.

我猜你从你的代码片段中使用UISlider作为进度表.您是否考虑过使用UIProgressView?


Sam*_*m B 8

跟踪用户是否与UISlider进行交互的更好方法是使用连续标志.

如果您只想在操作完成后触发滑块操作,并且用户已将其手指移开,则使用

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

否则默认设置为YES.

[blurSlider  addTarget:self action:@selector(blurSliderChanged) forControlEvents:UIControlEventValueChanged];
    blurSlider.continuous = YES;
Run Code Online (Sandbox Code Playgroud)


Gee*_*ebs 7

这标志着已经解决了,但是我想为此添加另一种解决方案,我觉得它更清洁.

if (!progressSlider.highlighted) {
    [progressSlider setValue: progressValue];
}
Run Code Online (Sandbox Code Playgroud)