当焦点更改为Apple TV上的任何媒体应用程序中的UITextView时 - App Store,电影,电视节目等 - 它会突出显示如下效果:
弹出,出现阴影,拇指在触控板上滚动,使其具有光泽的3D效果。它非常像聚焦的UIButton,或者包含作为聚焦视图的子视图的UIImageView,如UICollectionViewCell。
使用UIButton,如果它是用一种UIButtonType.System初始化的,它会在聚焦时获得聚焦外观,而不需要任何工作。
在焦点视图中使用UIImageView可以设置adjustsImageWhenAncestorFocused
,并且在视图聚焦后,它会获得聚焦的外观。
但UITextView和UILabel都不会在被选中时自动设置样式,或者在祖先聚焦时具有调整外观的属性。
所以我想知道我该怎么做。 Apple是否提供任何方式来显示这样的焦点文本视图?
答案 0 :(得分:0)
据我所知,您正在描述的“光滑3D效果”只能通过使用UIImageView.adjustsImageWhenAncestorIsFocused来访问。并且几乎不可能重建自己。
基于此,我猜想是通过将视图与本身聚焦的UIImage副本叠加在一起来实现的。那样,或者Apple可以访问低级API,以获得您和我无法访问的有光泽的3D效果。
因此,请尝试以下操作:
class CustomTextView:
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
if (isFocused){
if (self.imageOverlay != nil) {
let imageView: UIImageView = self.toImageView() // many ways to achieve this. Ex: see UIGraphicsBeginImageContext()
imageView.frame = bounds
imageView.adjustsImageWhenAncestorIsFocused = true
imageView.clipsToBounds = false
self.imageOverlay = imageView
addSubview(imageView)
}
}
else{
coordinator.addCoordinatedAnimations(... completion:{
if (!self.isFocused){
self.imageOverlay.removeFromSuperview()
self.imageOverlay = nil
}
})
}
super.didUpdateFocus( in:context, with:coordinator )
}
UIImageView.adjustsImageWhenAncestorIsFocused效果还包括缩放,投影和平移时的反馈/视差。这些既不可移动也不可配置。
或者,尝试使用TVUIKit中的各种锁定视图。也许其中的一个或多个具有内置的光泽3D效果。我还没有尝试过。