据我所知,您所描述的“光泽 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 效果。我还没有尝试过它们。