【发布时间】:2018-09-03 07:19:04
【问题描述】:
这是一个简单的木琴应用程序,来自我正在关注的教程。 如果我们按下每个按钮,就会播放一个新音符。它工作正常。 但是当我想从一个按钮滑动到另一个按钮时,没有声音。
完整项目的 Github 链接: https://github.com/jaineelesh/Xylophone
我也尝试过使用 Touch Drag Enter/Exit/Inside/Outside,但似乎没有什么对我有用。
请帮忙。
ViewController.swift 文件
import UIKit
import AVFoundation
class ViewController: UIViewController{
var player: AVAudioPlayer?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func noteOnDrag(_ sender: UIButton) {
// selecting the correct note based on the tag
//playSound(tag: sender.tag)
print("enter")
}
@IBAction func noteOnDragExit(_ sender: UIButton) {
print("Exit")
}
@IBAction func notePressed(_ sender: UIButton) {
// selecting the correct note based on the tag
//playSound(tag: sender.tag)
}
func playSound(tag: Int) {
let note = "note" + String(tag)
guard let url = Bundle.main.url(forResource: note, withExtension: "wav") else { return }
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue)
guard let player = player else { return }
player.play()
} catch let error {
print(error.localizedDescription)
}
}
我是初学者,所以我的知识非常有限。我试图找到解决方案,但没有一个可以解释如何使用 swift 4 解决我的问题。如果存在一些旧的解决方案,那么我无法理解它们。 我尝试使用以下事件,但它们似乎不起作用。
【问题讨论】:
-
使用 UIControls 而不是 UIButtons 可能会更好。设置它们可能有点困难,因为它会通过情节提要,但是制作一个自定义 UIControl 类并将它们放置在您的视图控制器上可能是一个更干净的解决方案。他们有一个draggedInto 方法会触发,你可以将它传回你的视图控制器,以便播放你想要播放的声音。
-
从音乐的角度来看,您正在寻找并描述的功能称为“滑音”(从一个按钮/键滑动或拖动到下一个。可能值得查找“ How to Glissando” in code/programming/swift 等。我还尝试添加一些功能:1)playChords(例如,四个手指,四个水龙头,四个音符一次。四个 mediaPlayer 实例(创建和发布,重新使用四个媒体播放器实例)2)noteNames 切换开关(例如 IB 布尔开关 true/false for button.text)如果您对此有任何运气或想法,请告诉我。最良好的祝愿,托尼厄巴