【问题标题】:Get Force of long Touch on UIButton在 UIButton 上获得长按力
【发布时间】:2019-02-20 06:59:35
【问题描述】:

在我的应用中,我有一个按钮,由施加的力的大小控制,但我似乎无法可靠地获取力值的更新。

目前,我只通过 touchesBegan、touchesMoved 和 touchesEnded 注册触摸,这在大多数情况下都有效,但并非总是如此。

可以将手指放在屏幕上并施加压力,而不会触发 touchesMoved 事件。如果您用力按下屏幕(足以使力值最大化)并且不移动手指,它只会以初始(~0)力调用 touchesBegan 并且在您摆动手指或释放压力之前不会调用 touchesMoved所以力可以从最大值改变。

这意味着无法判断用户当前是否在用力按下。 有谁知道不断轮询触球并读取其力量值的方法?除了触摸事件,还有其他读取触摸屏信息的方法吗?

这个功能完全依赖于强制触摸,所以我不关心没有 3D Touch 的用户的兼容性,是否关闭它,或可访问性调整。谢谢!

编辑:我似乎误认了问题。 touchesBegan(和 beginTracking)事件在用力按下而不移动直到按下后约 1 秒时被调用。当它们出现时,会显示最大力(表示当前值,而不是初始值)我已经测试过这在其他应用程序中是正确的,并且需要一些练习才能正确。这可能是系统预期某些偷看行为并拒绝触摸吗?有什么办法解决吗?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    不要将touchesBegan 方法与UIButton 子类一起使用。而不是这样简单地覆盖这两个方法..

    class Button: UIButton {
        override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
            //This is the alternate method of touchesBegan
            return true
        }
        override func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
            //This is the alternate method of touchesMoved
            let force = touch.force
            return true
        }
    }
    

    【讨论】:

    • 这很有用!不幸的是,在实施您的建议后,我意识到我的问题与我最初的想法略有不同,并且该解决方案也遇到了同样的问题。请参阅我对问题的编辑。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多