是否可以使UIImageView
聚焦?还是应该仅将UICollectionView
用于所有可能的视图?
我尝试覆盖canBecomeFocused
,但是什么也没发生。
我发现的最简单的方法是将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()
}
}
尝试将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。