OGeek|极客世界-中国程序员成长平台

标题: ios - 如何告诉我的应用忽略特定触摸? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 22:00
标题: ios - 如何告诉我的应用忽略特定触摸?

我的 iPad 应用需要能够完全消除特定的触摸,即来自手指或触控笔的触摸,而不是来自手掌的触摸。该 View 启用了多点触控,因此我可以分别分析每个触控。

我目前可以使用 majorRadius 属性区分这些触摸,但我不确定如何消除较大的触摸,即那些大于我决定的阈值的触摸。

let touchThreshold : CGFloat = 21.0

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        if touch.majorRadius > touchThreshold {
            //dismiss the touch(???)
        } else {
            //draw touch on screen
        }
    }
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        if touch.majorRadius > touchThreshold {
            //dismiss the touch(???)
        } else {
            //draw touch on screen
        }
    }
}



Best Answer-推荐答案


如果您只想检测某些类型的触摸,这里有一个可能的解决方案:

选项 1

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    touches.forEach { touch in
        switch touch.type {
        case .direct, .pencil:
            handleTouch(for: touch.majorRadius)
        case .indirect:
            // don't do anything
            return
        }
    }
}

func handleTouch(for size: CGFloat) {
    switch size {
    case _ where size > touchThreshold:
        print("do something")
    default:
        print("do something else")
    }
}

选项 2

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    touches.filter{($0.type == .direct || $0.type == .pencil || $0.type == .stylus) && $0.majorRadius > touchThreshold}.forEach { touch in
        print("do something")
    }
}

您可以阅读更多触摸类型here .

关于ios - 如何告诉我的应用忽略特定触摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54358278/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4