如何为弯曲的SKNodes指导tvOS焦点项目

Aar*_*ron 14 sprite-kit sknode swift tvos

我的tvOS应用程序使用如下所示的SKNodes生成游戏板:

在此输入图像描述

每个由线条分隔的形状是可聚焦的SKNode(例如,每个彩色楔形由5个SKNode组成,其尺寸逐渐减小,更接近中心).

我的问题是焦点引擎没有聚焦下一个焦点项(SKNode),它会感觉像是一个逻辑的,最自然的下一个节点.这个问题是因为焦点引擎逻辑是矩形的,而我的SKNode是弯曲的.正如您在下面看到的那样,当从最外面的黄色SKNode向下滑动时尝试找出下一个可聚焦项目时存在固有问题:

在此输入图像描述

在上面的示例中,焦点引擎根据节点的边缘推断出当前聚焦区域是红色阴影矩形内的区域.由于该逻辑,聚焦矩形与不是当前聚焦节点的一部分的区域重叠,包括第二黄色SKNode的整个宽度.因此,当向下滑动时,焦点引擎会将焦点跳到第三个(中间)黄色SKNode.

如何解决这个焦点问题,以便我的圆形游戏板SKNodes的纵向和横向焦点更自然,而不是看起来如此零星?这可能吗?也许有UIFocusGuides?

小智 0

您必须手动处理焦点。使用下面列出的方法检查上下文中的下一个焦点视图。

func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool
Run Code Online (Sandbox Code Playgroud)

在此方法中,您将获得焦点标题方向(UIFocusHeading)。截取所需的方向并将所需的下一个聚焦视图保存在某些属性中。通过调用以下方法手动更新焦点

setNeedsFocusUpdate()

updateFocusIfNeeded()
Run Code Online (Sandbox Code Playgroud)

这将触发以下内容

preferredFocusEnvironments: [UIFocusEnvironment] { get }
Run Code Online (Sandbox Code Playgroud)

在此检查已保存的实例,并返回相同的实例。这将帮助您根据您的要求手动处理焦点。