1

是否有可能使一个UIImageView焦点?或者我应该只UICollectionView对所有可能的视图使用 a ?

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

4

2 回答 2

1

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

imageView.adjustsImageWhenAncestorFocused = true
imageView.clipsToBounds = false

这应该一次给你几个焦点效果:

  • 放大
  • 投影
  • 平移时的 2D 视差
  • 最后但并非最不重要的一点:平移时的微光效果

如果你想实现你自己的 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。

于 2019-10-29T22:43:06.563 回答
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()
   }

}
于 2016-01-13T02:06:44.097 回答