Swift开发:UIButton需用哪个滑动事件实现不抬手切换按键播放音符?
木琴应用触屏滑动切换音符的实现方案

要实现手指不离开屏幕时在多个UIButton间切换播放音符,你需要组合使用以下几个触摸事件:
- Touch Down:手指按下某个按键时触发,用来播放当前按键的音符,同时记录当前激活的按键。
- Touch Drag Enter:手指拖动进入新按键区域时触发,此时停止之前的音符,播放当前按键的音符。
- Touch Drag Exit:手指拖动离开当前按键区域时触发,停止当前播放的音符。
你之前单独使用Touch Drag Enter没达到预期,是因为这个事件需要在手指已经按下的前提下拖动进入才会触发;而Touch up Inside是手指抬起时才触发,完全不符合滑动不离开屏幕的场景。
具体实现步骤(以Swift为例):
- 给每个木琴按键绑定上述三个事件。
- 用一个变量跟踪当前正在发声的按键,避免重复播放或漏停音效。
- 实现对应音效的播放与停止逻辑。
示例代码:
var currentActiveButton: UIButton? @IBAction func onButtonTouchDown(_ sender: UIButton) { // 停止之前的音效 currentActiveButton?.stopNote() // 播放当前按键的音符 sender.playNote() currentActiveButton = sender } @IBAction func onButtonDragEnter(_ sender: UIButton) { // 复用Touch Down的逻辑,切换到当前按键 onButtonTouchDown(sender) } @IBAction func onButtonDragExit(_ sender: UIButton) { // 离开当前按键时停止音效 if currentActiveButton == sender { sender.stopNote() currentActiveButton = nil } }
额外注意:确保所有按键的交互功能开启(isUserInteractionEnabled = true),且没有上层视图遮挡触摸事件传递。
内容的提问来源于stack exchange,提问作者Kagifer
相关产品推荐
相关产品推荐

