【问题标题】:How to make a UIImageView focusable using the focus engine on Apple TV如何使用 Apple TV 上的焦点引擎使 UIImageView 可聚焦
【发布时间】:2015-12-09 05:34:27
【问题描述】:

是否可以使UIImageView 成为焦点?还是应该对所有可能的视图只使用UICollectionView

我试图覆盖canBecomeFocused,但什么也没发生。

【问题讨论】:

    标签: swift tvos apple-tv focus-engine


    【解决方案1】:

    我发现最简单的方法是继承 UIButton 而不是 UIImageView(因为 UIButton 已经有一个图像子视图)。你可能不需要我放在那里的所有东西(重要的部分是在 layoutSubviews 中设置 imageView?.adjustsImageWhenAncestorFocused = true)

    class AtvImageButton:UIButton
    {
    
       override func awakeFromNib() 
       {
          super.awakeFromNib()      
          contentMode = UIViewContentMode.ScaleAspectFit
          contentHorizontalAlignment = .Fill 
          contentVerticalAlignment   = .Fill     
       }
    
       override func layoutSubviews() 
       {
          imageView?.adjustsImageWhenAncestorFocused = true
          imageView?.clipsToBounds = false  
          super.layoutSubviews()
       }
    
       override func canBecomeFocused() -> Bool
       {
          return enabled && super.canBecomeFocused()
       }
    
    }
    

    【讨论】:

      【解决方案2】:

      尝试将 UIImageView 包装在容器视图中,使容器视图具有焦点,然后使用:

      imageView.adjustsImageWhenAncestorFocused = true
      imageView.clipsToBounds = false
      

      这应该同时给你几个焦点效果:

      • 放大
      • 投影
      • 平移时的二维视差
      • 最后但同样重要的是:平移时的微光效果

      如果你想实现自己的 UIImageView 焦点效果,你可以做你所做的(覆盖 canBecomeFocused = true)但也添加:

          override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
              coordinator.addCoordinatedAnimations({
                 self.transform = self.isFocused ? CGAffineTransform( scaleX:1.1, y:1.1 ) : .identity
              }, completion: nil)
          }
      

      只知道adjustsImageWhenAncestorFocused 选项是全部或全部。因此,您可以完全按原样获取所有四个系统焦点效果,也可以失去所有四个并自己实现所有焦点效果。由于无法为所有实际目的重新创建微光效果,因此通常最好坚持使用 adjustsImageWhenAncestorFocused。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多