这是我正在关注的教程中的一个简单的木琴应用程序。 如果我们按每个按钮,则会播放一个新音符。工作正常。 但是当我想从1个按钮滑动到另一个按钮时,没有声音。
整个项目的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)
}
}
我是一个初学者,所以我的知识非常有限。我试图找到解决方案,但是没有任何方法可以解释如何用迅捷的4解决我的问题。如果存在一些旧的解决方案,那么我将无法理解它们。 我尝试使用以下事件,但它们似乎不起作用。
答案 0 :(得分:1)
您已经连接了事件Touch Up Inside
,这就是为什么按有效的原因(您的notePressed
功能)。如果您希望代码也可以通过滑动来工作,请尝试连接Touch Drag Exit
或Touch Drag Enter
事件。
在最后一个屏幕上,选择该事件并将其拖到
@IBAction func notePressed(_ sender: UIButton) {
// selecting the correct note based on the tag
//playSound(tag: sender.tag)
}
事件名称是自描述的,但here您也可以找到说明
//编辑: 好的,起初我可能不了解您。 我认为您的问题类似于THIS。
想法:
创建一个包含所有按钮的插座集合。
@IBOutlet var buttons: [UIButton]!
使用touchesMoved
方法(示例):
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)
guard let touch = event?.allTouches?.first else {return}
let touchLocation = touch.location(in: self.view)
buttons.forEach { (button) in
if button.frame.contains(touchLocation) {
print(button.tag)
}
}
}