首页 > 解决方案 > 一种方法如何同时被称为乘法?

问题描述

我正在快速开发一个 iOS 应用程序。在这个应用程序中,必须实现像钢琴键盘这样的界面。我想把这个键盘做成和弦的,也就是说这个键盘可以同时敲击,但是我还是没有成功。

我检查了处理按钮点击事件的时间戳。处理方法如下。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
       for touch in touches {
           let point = touch.location(in: self.stackView)
           let hitView = self.stackView.hitTest(point, with: event)
           if (hitView != nil) {
               NSLog("%d first", hitView!.tag)
               self.pushChanged(senderTag: hitView!.tag, add: true)
               self.keyPushed(senderTag: hitView!.tag, userPushed: true)
               self.keyboardTouchStateChanged(senderTag: hitView!.tag, add: true)
               if self.bluetoothTag == "1" {
                   let data = String(hitView!.tag)
                   self.bService.send(colorName: data)
               }
               NSLog("%d last", hitView!.tag)
           }
       }
   }
func keyPushed(senderTag:Int, userPushed:Bool = false){
       audioPlayers[senderTag].currentTime = 0
       audioPlayers[senderTag].play()
   }

时间戳如下。

2019-08-09 20:48:24.878297+0900 ***[31982:2052909] 40 first
2019-08-09 20:48:24.906382+0900 ***[31982:2052909] 40 last
2019-08-09 20:48:24.906604+0900 ***[31982:2052909] 52 first
2019-08-09 20:48:24.930185+0900 ***[31982:2052909] 52 last

在这次考试中,我分别点击了标记为 40 和 52 的两个按钮。在日志中可以看到,首先处理40-tag按钮的事件,完成后处理52-tag按钮的事件。

在这里,我希望同时执行这两个(以及更多)事件处理。我很容易想出实现异步执行。我尝试了 DispatchQueue 但没有工作,因为必须异步执行一个函数(需要复制?)。

我该如何实施?请告诉我一些解决方案。

标签: swiftasynchronousbutton

解决方案


推荐阅读