ios - 在 Swift 中识别触摸

标签 ios swift multi-touch

你好,

我是 Swift(以及所有面向对象的语言)的新手,我正在创建一个 iPad 应用程序,让您可以用手指绘图。我目前正在尝试正确管理多点触控事件,并且我想跟踪触摸。这个想法是只在一次触摸后绘制,并丢弃其他触摸,即使在初始触摸结束后也忽略它们。

为此,我需要识别每个触摸,但 UITouch 对象不包含 ID。实际上,由于触摸存储在 NSSet 中,因此它们没有顺序。

在互联网上犯错,我找到了一个可能的解决方案,将触摸的地址存储在 CFDictionary 中。这在 Objective-C 中似乎是合理的,但 Swift 对指针不是很友好,而且我还没有设法创建一个 CFDictionary 将 UITouch 上的指针作为值。

有人知道怎么处理吗?我是否使用了 CFDictionaries 错误(我尝试将 UnsafePointer<UITouch> 作为值)?还有其他我忽略的解决方案吗?

感谢您的帮助。

最佳答案

我只想要一个简单的触摸键,并使用 UITouch 的字符串插值来获得一个。我触摸的字符串插值如下所示:

<UITouch: 0x1046355b0> phase: Began tap count: 1 force: 0.000 window: <UIWindow: 0x10462beb0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x1c0247fe0>; layer = <UIWindowLayer: 0x1c02325a0>> view: <SCNView: 0x104624be0 | scene=<SCNScene: 0x1c4129ec0> sceneTime=0.000000 frame={{0, 0}, {414, 736}} pointOfView=<SCNNode: 0x1c43f9400 rot(0.000000 1.000000 0.000000 3.141593) | camera=<SCNCamera: 0x10475af60> | no child>> location in window: {220, 344} previous location in window: {220, 344} location in view: {220, 344} previous location in view: {220, 344}

我只需要第二部分,所以我编写了以下方法来提取它。

func getTouchKey(touch:UITouch) -> String {
    let interpolation = "\(touch)"
    let parts = interpolation.split(separator: " ", maxSplits: 3, omittingEmptySubsequences: true)
    let touchKey = String(parts[1])
    return touchKey
}

在这种情况下,它返回:

0x1046355b0>

如有必要,我可以清理它,但由于它在触摸的整个生命周期内已经是可重复的,所以我没有添加任何其他东西。

关于ios - 在 Swift 中识别触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27042905/

相关文章:

ios - 错误 NSLocalizedDescription=无法保存

Delphi VCL - WM_Touch RegisterTouchWindow(Handle, 0);触摸面板时不会处理消息

javascript - 使用 D3.js 和 TUIO 的触摸事件

ios - UITextView 内部 UITableViewCell 自动布局 iOS 6 与 iOS 7

ios - 如何在编辑表格 View 单元格中的文本字段时重新加载所有表格 View 单元格 - iOS Swift

iphone - 更新博客文章问题的TableView

ios - 文件提供者应用程序扩展错误

ios - 以编程方式在两个 SKSpriteKitNodes 的宽度之间设置我的约束?

ios - 如何重用 UITableView 中的单元格

javafx - 如何在 JavaFX 中将 TouchEvent 与 MouseEvent 分开