【发布时间】:2015-12-09 05:34:27
【问题描述】:
是否可以使UIImageView 成为焦点?还是应该对所有可能的视图只使用UICollectionView?
我试图覆盖canBecomeFocused,但什么也没发生。
【问题讨论】:
标签: swift tvos apple-tv focus-engine
是否可以使UIImageView 成为焦点?还是应该对所有可能的视图只使用UICollectionView?
我试图覆盖canBecomeFocused,但什么也没发生。
【问题讨论】:
标签: swift tvos apple-tv focus-engine
我发现最简单的方法是继承 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。
【讨论】: