You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift开发:UIButton需用哪个滑动事件实现不抬手切换按键播放音符?

木琴应用触屏滑动切换音符的实现方案

木琴应用界面

要实现手指不离开屏幕时在多个UIButton间切换播放音符,你需要组合使用以下几个触摸事件:

  • Touch Down:手指按下某个按键时触发,用来播放当前按键的音符,同时记录当前激活的按键。
  • Touch Drag Enter:手指拖动进入新按键区域时触发,此时停止之前的音符,播放当前按键的音符。
  • Touch Drag Exit:手指拖动离开当前按键区域时触发,停止当前播放的音符。

你之前单独使用Touch Drag Enter没达到预期,是因为这个事件需要在手指已经按下的前提下拖动进入才会触发;而Touch up Inside是手指抬起时才触发,完全不符合滑动不离开屏幕的场景。

具体实现步骤(以Swift为例):

  1. 给每个木琴按键绑定上述三个事件。
  2. 用一个变量跟踪当前正在发声的按键,避免重复播放或漏停音效。
  3. 实现对应音效的播放与停止逻辑。

示例代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:15:13