因此,您的目标是在您特别关注 tvOS 下的单元时做一些事情。问题是您正在移动其他 UI 元素,因此上下文可能会有所不同。在这种情况下,您必须只更改您必须关心的那些 UI。
进行实现的正确位置是 func didUpdateFocusInContext(),如下所示:
override func didUpdateFocusInContext(
context: UIFocusUpdateContext,
withAnimationCoordinator coordinator: UIFocusAnimationCoordinator
) {
coordinator.addCoordinatedAnimations({
if let cell = context.previouslyFocusedView as? UICollectionViewCell {
cell.layer.borderWidth = 2
}
if let cell = context.nextFocusedView as? UICollectionViewCell {
cell.layer.borderWidth = 5
}
},
completion: nil)
}
现在我们使用焦点协调器来应用我们的逻辑:
- 当先前聚焦的项目是 UICollectionViewCell 时,您必须将焦点释放到下一个项目。您不应该关心下一个项目是什么,因为它可能是集合单元格,也可能不是。为了好玩,在这种情况下,让我们将边框更改为 2。这个值可以默认设置。
- 当下一个焦点项目是 UICollectionViewCell 时,您必须以类似的方式处理它,否则它将变得一团糟……所以,让我们将边框更改为 5。
如您所见,didUpdateFocusInContext() 为当前视觉上下文中的所有视图提供了一种通用方法。您可以对其他 UI 元素应用相同的方法。
享受 tvOS 的乐趣...