我有一个声音效果,我只想在滑块移动时才能播放。

当前,当UISlider发送Value Changed事件时,我有playSound方法启动。

我需要一种方法来检测滑块何时未移动,但尚未释放。

我想我可以使用其父类(super class)的Control Events来确定时间,但是我看不出如何检测到它们。

有任何想法吗?

最佳答案

如果我对您的理解正确,那么无论滑动与否,只要滑动滑块,您都希望继续播放声音。为此,将一个方法注册为UIControlEventTouchDown(可能还有UIControlEventTouchDragInside)事件的目标,将另一个注册为UIControlEventTouchDragExit / TouchUpOutside / TouchUpInside / TouchCancel(取决于您的需求)的某种组合。第一种方法开始播放声音,第二种方法停止播放声音。

如果要在仍然触摸但不移动滑块时播放另一种声音,建议您每次收到TouchDown / ValueCahanged / etc事件时启动一个计时器:

self.touchTimer = [NSTimer scheduledTimerWithTimeInterval: kDelay
                                                target:self
                                              selector:@selector(noMovement:)
                                              userInfo:nil
                                               repeats:NO];

然后,每当您收到另一个ValueChanged值时,就取消计时器并触发另一个计时器(或者最好重新安排原始计时器)。当计时器触发时,这意味着自kDelay以来用户尚未移动滑块,并且您可以更改正在播放的声音。 (您也需要在收到TouchUpInside / Outside事件时取消计时器。)

09-10 01:20
查看更多