识别Swift中的触摸

时间:2014-11-20 15:10:18

标签: ios swift multi-touch

美好的一天,

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

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

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

有谁知道如何处理这个问题?我使用CFDictionaries是错误的(我尝试将UnsafePointer<UITouch>作为值)?还有其他我忽略的解决方案吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我只想要一个简单的触摸键,并使用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>

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