我有一个图像视图,当包含视图聚焦时,它将获得这个令人敬畏的tvOS焦点效果。 问题是 - 它应该有圆角。现在这很容易做到:
Order
我必须将图层视图的imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true
或图像视图的masksToBounds
设置为true(基本相同),以便剪切图像的边缘 - 但是我这样做,焦点效果将不再起作用,因为它也会被剪裁。
我的按钮问题或多或少有问题,但由于聚焦效果比图像视图(仅缩放和阴影)简单得多,我自己实现了它,但这不是图像视图的选项,应用所有效果(移动,闪烁等......)
有更简单的方法吗?我错过了什么?我不能成为唯一想弄清楚它如何运作的人!? :)
答案 0 :(得分:3)
https://forums.developer.apple.com/thread/20513
我们也面临同样的问题。当您绕过角落时,您可以看到“闪耀”仍然具有矩形形状。
我向多伦多技术讲座的开发布道者展示了这个问题,他们说这是一个错误。据报道并打开了rdar:// 23846376
答案 1 :(得分:3)
我找到了替代解决方案。可能要做的是实际绘制图像,并使用Alpha通道剪切掉角落。然后在聚焦时正确缩放图像。这适用于该层。然后,要将alpha通道添加到其他层(如发光效果层),我们需要进行设置; “ masksFocusEffectToContents = true”。
我根据answer对此做了扩展:
Swift 4.2
extension UIImageView {
func roundedImage(corners: UIRectCorner, radius: CGFloat) {
let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: self.frame.size)
UIGraphicsBeginImageContextWithOptions(self.frame.size, false, 1)
UIBezierPath(
roundedRect: rect,
byRoundingCorners: corners,
cornerRadii: CGSize(width: radius, height: radius)
).addClip()
self.draw(rect)
self.image = UIGraphicsGetImageFromCurrentImageContext()!
// Shadows - Change shadowOpacity to value > 0 to enable the shadows
self.layer.shadowOpacity = 0
self.layer.shadowColor = UIColor.black.cgColor
self.layer.shadowOffset = CGSize(width: 10, height: 15)
self.layer.shadowRadius = 3
// This propagate the transparency to the the overlay layers,
// like the one for the glowing effect.
self.masksFocusEffectToContents = true
}
}
然后应用圆角调用:
myImageView.adjustsImageWhenAncestorFocused = true
myImageView.clipToBounds = false
// masks all corners with a radius of 25 in myImageView
myImageView.roundedImage(corners: UIRectCorner.allCorners, radius: 25)
很明显,可以修改roundedImage()以添加参数以在调用时定义阴影。
缺点:
否则,tvOS 12(现在为beta)引入了Lockup。我设法以编程方式实现了它们,如this answer所示。