如何在手指从1按钮拖动到下一个按钮时触发UIButton事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在手指从1按钮拖动到下一个按钮时触发UIButton事件相关的知识,希望对你有一定的参考价值。

这是我正在关注的教程中的一个简单的Xylophone应用程序。如果我们按下每个按钮,则会播放一个新音符。它工作正常。但是当我想从1个按钮滑动到另一个按钮时,没有声音。

完整项目的Github链接:https://github.com/jaineelesh/Xylophone

我也尝试过触摸拖动进入/退出/内部/外部,但似乎没有什么对我有用。

请帮忙。

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)
    }
}

这就是应用程序的外观。 enter image description here

我是初学者,所以我的知识非常有限。我试图找到解决方案,但没有一个解释如何用swift 4解决我的问题。如果存在一些旧的解决方案,那么我无法理解它们。我试图使用下面的事件,但他们似乎没有工作。 enter image description here

答案

你有连接事件Touch Up Inside这就是为什么按压工作(你的notePressed功能)。如果您希望您的代码也可以使用滑动,请尝试连接Touch Drag ExitTouch Drag Enter事件。

在最后一个屏幕上选择该事件并将其拖到上面

@IBAction func notePressed(_ sender: UIButton) {
    // selecting the correct note based on the tag
    //playSound(tag: sender.tag)
}

事件名称是自我描述的,但here你也可以找到解释

//编辑:好的,我起初可能并不理解你。我认为你的问题类似于THIS

想法:

  1. 制作包含所有按钮的插座集合。 @IBOutlet var buttons: [UIButton]!
  2. 使用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) } } }

以上是关于如何在手指从1按钮拖动到下一个按钮时触发UIButton事件的主要内容,如果未能解决你的问题,请参考以下文章

半按按钮触发

LibGDX - InputProcessor - 如果用户将手指从代表在 X 上移动的按钮拖动到代表在 Y 上移动的按钮

将手指从按钮滑动到 iPhone 中的另一个按钮

如何在单击按钮时从一个视图控制器导航到另一个视图控制器?

UIButton UIControlEventTouchUpInside 触发事件,即使在按钮框架之外拿起手指

UIControlEventTouch...?