cr4*_*ide 5 xcode uiimageview apple-tv tvos
我有一个图像视图,当包含视图聚焦时,将获得这个令人敬畏的tvOS焦点效果.问题是 - 它应该有圆角.现在这很容易做到:
imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true
Run Code Online (Sandbox Code Playgroud)
我必须masksToBounds将图层或clipsToBounds图像视图中的任何一个设置为true(基本上相同),以便剪切图像的边缘 - 但是一旦我这样做,焦点效果将不再起作用,因为它也会被剪裁.
我对按钮的问题或多或少有相同的问题,但由于焦点效果比图像视图(仅缩放和阴影)简单得多,我自己实现了它,但这不是图像视图的选项,所有应用的效果(移动,闪烁等......)
有没有更简单的方法?我错过了什么?我不能成为唯一想弄清楚它如何运作的人!?:)
我已经找到了替代解决方案。人们可以做的就是实际绘制图像,用 Alpha 通道剪掉角落。聚焦后图像会正确缩放。这适用于图层。然后,要将 Alpha 通道添加到其他图层(例如用于发光效果的图层),我们需要进行设置;“masksFocusEffectToContents = true”。
我根据这个答案对其进行了扩展:
斯威夫特 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
}
}
Run Code Online (Sandbox Code Playgroud)
然后应用圆角调用:
myImageView.adjustsImageWhenAncestorFocused = true
myImageView.clipToBounds = false
// masks all corners with a radius of 25 in myImageView
myImageView.roundedImage(corners: UIRectCorner.allCorners, radius: 25)
Run Code Online (Sandbox Code Playgroud)
显然,可以修改 roundedImage() 以添加参数来定义调用时的阴影。
缺点:
除此之外,tvOS 12(目前为测试版)引入了 Lockup。我设法以编程方式实现它们,如这个答案所示。
小智 3
https://forums.developer.apple.com/thread/20513
我们也面临着同样的问题。当你圆角时,你可以看到“光泽”仍然是矩形。
我在多伦多的技术讲座上向开发布道者展示了这个问题,他们说这是一个错误。据报道并开放rdar://23846376
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |