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

由线条分隔的每个形状都是一个可聚焦的SKNode (例如,每个彩色楔形由5个SKNodes组成,这些楔形的大小逐渐减小,接近中心)。
我的问题是,焦点引擎不会关注下一个焦点项目(SKNode),因为它看起来像是逻辑上最自然的下一个要关注的节点。这个问题是因为焦点引擎逻辑是矩形的,而我的SKNodes是曲线的。正如你在下面看到的,当从最外面的黄色SKNode向下滑动时,试图找出下一个可聚焦的项目时存在固有的问题:

在上面的例子中,焦点引擎根据节点的边缘推断出当前焦点区域是红色阴影矩形内的区域。由于这种逻辑,聚焦的矩形与不是当前聚焦节点一部分的区域重叠,包括第二个黄色SKNode的整个宽度。因此,当向下滑动时,焦点引擎跳过焦点到第三个(中间)黄色SKNode。
如何才能解决这个焦点问题,让我的SKNodes圆形游戏板在垂直和水平方向上的焦点都更自然,而不会显得如此零星?这个是可能的吗?也许和UIFocusGuides一起?
发布于 2019-06-30 22:05:49
您必须手动处理焦点。使用下面列出的方法从上下文中检查下一个焦点视图。
func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool在此方法中,您将获得焦点方向(UIFocusHeading)。截取所需的方向,并将所需的下一个焦点视图保存在某些属性中。通过调用以下方法手动更新焦点
setNeedsFocusUpdate()
updateFocusIfNeeded()这将触发下面的
preferredFocusEnvironments: [UIFocusEnvironment] { get }在此检查保存的实例,并返回相同的实例。这将帮助您根据自己的需求手动处理焦点。
https://stackoverflow.com/questions/44382223
复制相似问题