swift - 一种方法如何同时被称为乘法?
问题描述
我正在快速开发一个 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 但没有工作,因为必须异步执行一个函数(需要复制?)。
我该如何实施?请告诉我一些解决方案。
解决方案
推荐阅读
- dart - NetworkImage 和 Image.network 的区别?
- android - 在 Visual Studio 中新创建的 Android 虚拟设备不起作用
- android - ViewActions.click() 和只执行 view.performClick() 的自定义 ViewAction 有什么区别?
- java - Hibernate:来自本机查询的 BigInteger vs Long 用于 JPQL 查询
- python - 对值'z'的tensorflow feed_dict问题感到困惑而不是feed
- javascript - 为什么新行的方括号没有自动分号插入(ASI)?
- php - 如何读取 WordPress 帖子 URL 中的“&”等特殊字符?
- android - 在 Carto 移动 SDK 中获取触摸的 MapTile 的 x 和 y 像素
- sympy - SymPy 简化不尝试因式分解
- angular - angular 6 项目不断出现不兼容错误