如何引导弯曲SKNode的tvOS焦点项目

问题描述 投票:0回答:1

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

由线分隔的每个形状都是一个可聚焦的 SKNode(例如,每个彩色楔形由 5 个 SKNode 组成,靠近中心尺寸逐渐减小)。

我的问题是,焦点引擎不会聚焦下一个焦点项目(SKNode),而这感觉像是逻辑上、最自然的下一个焦点节点。这个问题是因为焦点引擎逻辑是矩形的,而我的 SKNode 是弯曲的。如下所示,从最外层黄色 SKNode 向下滑动时尝试找出下一个可聚焦项目时存在固有问题:

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

如何解决这个焦点问题,以便我的 SKNodes 圆形游戏板的垂直和水平焦点都更加自然,而不显得那么零散?这可能吗?也许与 UIFocusGuides 一起使用?

swift sprite-kit tvos sknode
1个回答
0
投票

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

func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool

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

setNeedsFocusUpdate()

updateFocusIfNeeded()

这将触发以下内容

preferredFocusEnvironments: [UIFocusEnvironment] { get }

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

© www.soinside.com 2019 - 2024. All rights reserved.