【问题标题】:UISlider eventsUISlider 事件
【发布时间】:2011-01-12 01:15:53
【问题描述】:

我正在使用 UISlider,它会自动更新,除非用户触摸滑块按钮。因此我在由 NSTimer 自动更新的函数中做到了这一点:

if (!isSliderTouched) {
    [progressSlider setValue: progressValue];
}

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

编辑:这应该是情节:

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

解决方案

UIControlEventTouchDown
UIControlEventTouchUpInside
[progressSlider addTarget:self action:@selector(sliderMoveStart) forControlEvents:UIControlEventTouchDown];

干杯

【问题讨论】:

  • 我已经读了好几遍了,但我仍然不清楚你想要什么。但 TouchUpInside 是您在何时听以确定用户何时拿起手指的事件。
  • 我试图更好地解释它,请参阅更新
  • TouchUpInSide 被调用了两次 :(

标签: iphone objective-c events uislider


【解决方案1】:

你可以使用:

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

检测touchDowntouchUp 事件何时发生。你可以相应地设置你的标志。

我从您的代码 sn-p 猜测您正在使用 UISlider 作为进度表。您是否考虑过使用 UIProgressView 代替?

【讨论】:

【解决方案2】:

这被标记为已解决,但我想为此添加另一个我觉得更干净的解决方案。

if (!progressSlider.highlighted) {
    [progressSlider setValue: progressValue];
}

【讨论】:

  • 一些人出于某种原因投了反对票。也许我应该更好地解释一下: UISlider 对象具有“突出显示”属性,当滑块被触摸/拖动时为 YES。您可以直接使用它来计算何时更新值以及何时不更新。如果有人想投反对票,请告诉我您认为答案有什么问题:)
  • 对我来说,这种方法似乎可以检测到第一次按下滑块的时间而不是释放它的时间。
  • Max,它实际上给出了状态(触摸或未触摸),而不是检测按下或释放事件。提出问题的人想要设置是基于开始/结束事件的SliderTouched。我建议他可以只使用“突出显示”属性,而不是创建 isSliderTouched 并确定触摸的开始和结束。
  • 我正在开发一个使用 UISlider 作为进度控件的自定义音频播放器。而这正是我所需要的。它很优雅。非常感谢!
【解决方案3】:

跟踪用户是否完成与 UISlider 交互的更好方法是使用连续标志。

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

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

否则默认设置为YES。

[blurSlider  addTarget:self action:@selector(blurSliderChanged) forControlEvents:UIControlEventValueChanged];
    blurSlider.continuous = YES;

【讨论】:

    【解决方案4】:

    当用户触摸滑块时,您可以设置一个布尔变量标志并将其设为“否”。并在更新方法中检查标志是 YES 还是 NO。

    【讨论】:

    • 我想你误会了我。我希望用户可以使用滑块,但不希望自动更新过程在用户使用它时进行更新。
    • 你必须使用 valueChanged 方法或将触发连接到 valueChanged 的​​函数的函数
    • 不,当用户触摸了按钮但没有移动时。自动更新如下。
    • 在滑块的触摸事件上,您可以设置一个布尔变量标志并将其设为否。并在更新方法中检查标志是 YES 还是 NO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多