如何收听 Focus 事件(Apple TV)

How to listen to Focus events (Apple TV)

我们在 Scaleform 中有一个界面,因此不能使用内置 类,例如 UIButton、UITextField 等

这是我目前尝试过的方法:

  1. 通过 UISwipeGestureRecognizer 处理滑动,但与 Focus 系统不同的是,它只在手指触摸触摸板区域时产生一个事件。

  2. 正在订阅GCMicroGamepad.dpad.ValueChangedHandler GCMicroGamepad.reportsAbsoluteDpadValues 是肯定的,因为游戏目的需要绝对值。
    我以为我可以很容易地计算出相对值。但事实证明,当我按下触摸板的一角时,得到以下更新:
    (x = 1, y = 0) (x = 1, y = 1)
    而不是简单地接收
    (x = 1, y = 1) 这意味着生成了两个 valueChanged 事件,而不是一个。

有没有办法订阅Focus引擎事件?

好的,我已经这样实现了: 我有一个更新循环(显然)。在这个更新循环中,我查看了 CurTouchpadPositionPrevTouchpadPosition
CurTouchpadPosition 在每次调用 GCMicroGamepad.dpad.ValueChangedHandler
时设置 更新完成后 PrevTouchpadPosition 设置为 CurTouchpadPosition

显然,如果调用按以下顺序进行,这可能会引入一些问题:
GCMicroGamepad.dpad.ValueChangedHandler(x = 0, y = 1)
更新()
GCMicroGamepad.dpad.ValueChangedHandler(x = 1, y = 1)

但这并没有真正发生。可能 GCMicroGamepad.dpad.ValueChangedHandler 在主线程的某处被调用。