Ios 在电视操作系统上显示UITextView的聚焦效果?

Ios 在电视操作系统上显示UITextView的聚焦效果?,ios,uikit,uitextview,tvos,focus-engine,Ios,Uikit,Uitextview,Tvos,Focus Engine,当焦点在Apple TV上的任何媒体应用程序(应用商店、电影、电视节目等)中更改为UITextView时,它会突出显示如下效果: 它会弹出一个阴影,然后在触摸板上滚动你的拇指,给它带来光滑的3D效果。它很像聚焦的UIButton,或者像UICollectionViewCell一样包含为聚焦视图的子视图的UIImageView 使用UIButton,如果它是使用UIButtonType.System类型初始化的,则它在聚焦时获得聚焦外观,而无需任何操作 使用聚焦视图中的UIImageView,可

当焦点在Apple TV上的任何媒体应用程序(应用商店、电影、电视节目等)中更改为UITextView时,它会突出显示如下效果:

它会弹出一个阴影,然后在触摸板上滚动你的拇指,给它带来光滑的3D效果。它很像聚焦的UIButton,或者像UICollectionViewCell一样包含为聚焦视图的子视图的UIImageView

使用UIButton,如果它是使用UIButtonType.System类型初始化的,则它在聚焦时获得聚焦外观,而无需任何操作

使用聚焦视图中的UIImageView,可以设置
AdjustSimageWhennancestorFocused
,当视图聚焦时,它获得聚焦外观

但无论是UITextView还是UILabel,在被选中时都不会自动设置样式,或者在关注祖先时具有调整外观的属性


所以我想知道我该怎么做。苹果是否提供了这样的聚焦文本视图显示方式?

据我所知,您所描述的“光泽3D效果”只能通过使用UIImageView.AdjustSimageWhenConstorisFocused来访问。几乎不可能重现你自己

基于此,我猜效果是通过将视图与聚焦时自身的UIImage副本重叠来实现的。或者苹果可以访问一个低级别的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效果。我还没有用它们做过实验。

使用运动效果似乎很难做到,请看类似的问题,这可能就是为什么苹果这样做时它看起来是静态的。然后点击“显示更多”打开全屏描述。