跳到主要内容

焦点(Focus)

使用 Swift Concurrency API 时,只要图形含有焦点节点,Rive 视图就会自动加入原生焦点导航。平台在视图之间移动焦点。Rive 在图形内的元素之间移动焦点。

原生焦点(Native focus)​

Rive 在加载后异步发现焦点节点。图形可能先显示出来,视图稍后才能接收焦点。

原生焦点因平台而异。参见 Apple 对 iPadOS 15 及更高版本、tvOS 和 visionOS 以及 Mac Catalyst 的指引。iPhone 把完整键盘访问(Full Keyboard Access)作为单独的辅助功能提供。

📌 SwiftUI

图形准备好后,RiveUIViewRepresentable 和 AsyncRiveUIViewRepresentable 会自动变为可聚焦。把任一视图直接放进你的 SwiftUI 层级即可。

📌 UIKit

要让 RiveUIView 成为初始焦点的首选目标,从承载它的视图控制器的 preferredFocusEnvironments 返回它。

// 在承载 riveView 的视图控制器中。
override var preferredFocusEnvironments: [any UIFocusEnvironment] {
[riveView]
}

UIKit 在更新焦点时会考虑这个偏好。如果某个原生控件已经拥有焦点,加载图形后焦点仍留在该控件上。参见 Apple 的 UIFocusEnvironment 文档。

📌 AppKit

Rive 视图会加入窗口的 key-view 循环。在代码中用 NSWindow 的 selectNextKeyView(_:) 或 selectPreviousKeyView(_:) 沿该循环移动。参见 AppKit 的 key-view API。

在元素之间移动(Moving between elements)​

  • Tab 和 Shift+Tab 遵循编辑器中设置的焦点顺序。
  • 方向键按你按下的方向移动焦点。
  • 在 tvOS 上,Siri Remote 也会移动焦点。Rive 把遥控器的 Select 按钮当作 Enter。参见 Apple TV 焦点交互。

Rive 会先等状态机处理每个按键,再决定是否把它交回平台。键盘监听器比焦点导航更早收到按键。例如,如果 Rive 在最后一个元素上没有处理 Tab,平台就可以把焦点移到下一个原生控件。

完整键盘访问,以及 tvOS 以外的手柄导航,不属于 Apple 运行时的焦点支持。VoiceOver 请使用语义。

看完还有疑问?进群交流下!
与众多 Rive 创作者、开发者一起交流探讨与答疑解惑。
加入交流群