我正在使用一个视图处理一个简单的项目。当用户按下视图时,应该播放音调,当他们抬起手指时,它应该停止。基本上像摩尔斯电码。
编辑:为了澄清,我正在寻找与键盘产生的音效一样瞬间和短暂的效果。 UILongPressGestureRecognizer的最小持续时间设置为0.01,因此它可以立即有效启动。
我现在拥有此设置的方式是这样的:
var player = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
// Set up sound files
var fileLocation = NSString(string: NSBundle.mainBundle().pathForResource("Eb", ofType: "mp3")!)
var error:NSError? = nil
player = AVAudioPlayer(contentsOfURL: NSURL(string: fileLocation), error: &error)
player.prepareToPlay()
}
@IBAction func pressed(gesture: UILongPressGestureRecognizer) {
switch gesture.state{
case .Began:
player.play()
//Some other code
case .Ended:
player.pause()
//Some other code
default:
return
}
}
现在,如果按下的时间相当长,则可以正常工作,但如果按下它太短,则声音片段永远不会播放。声音文件开头没有空格,所以我知道这不是问题。我也确定手势识别器被调用,因为\\ Some other code
执行得很好。
我的问题是,还有其他方法可以让音频更具响应性吗?我需要它能够很快打开和关闭。在其他框架中是否有其他播放方法,或者生成音调的方式会更快?
答案 0 :(得分:0)
我最终发现这个问题的解决方案并不完美,但我会留在这里,万一有人偶然发现类似的东西。
我创造了一个允许的最小游戏时间,在我的情况下为0.1秒。按下按钮时,NSTimer开始倒计时,当它达到0时,如果触发设置标志的功能。释放按钮时,它会检查标志是否已设置,如果已设置,则停止播放。如果未设置标志,则继续播放,直到计时器到达零。