焦点(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 请使用语义。