Xcode tvOS:聚焦时可查看图像的圆角

Xcode tvOS:聚焦时可查看图像的圆角,xcode,uiimageview,tvos,apple-tv,Xcode,Uiimageview,Tvos,Apple Tv,我有一个图像视图,当包含的视图被聚焦时,它将获得这种很棒的tvOS聚焦效果。 问题是,它应该有圆角。现在这很容易做到: imageView.layer.cornerRadius = 5 imageView.layer.masksToBounds = true 我必须将图层的masksToBounds或图像视图的clipsToBounds设置为true(基本相同),以便剪裁图像的边缘-但一旦这样做,聚焦效果将不再起作用,因为它也会被剪裁 我的按钮或多或少也有同样的问题,但由于焦点效果比图像视图

我有一个图像视图,当包含的视图被聚焦时,它将获得这种很棒的tvOS聚焦效果。 问题是,它应该有圆角。现在这很容易做到:

imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true 
我必须将图层的
masksToBounds
或图像视图的
clipsToBounds
设置为true(基本相同),以便剪裁图像的边缘-但一旦这样做,聚焦效果将不再起作用,因为它也会被剪裁

我的按钮或多或少也有同样的问题,但由于焦点效果比图像视图(仅缩放和阴影)简单得多,我只是自己实现了它,但这不是图像视图的选项,应用了所有效果(移动、闪烁等…)

有没有更简单的方法?我错过什么了吗?我不可能是唯一一个想弄明白这是怎么回事的人!?:)

我们也面临同样的问题。当你绕过拐角时,你可以看到“发光”仍然是一个矩形

我在多伦多的技术讲座上向开发人员宣传了这个问题,他们说这是一个bug。它已经报告并开放了rdar://23846376


我找到了另一个解决办法。我们可以做的是实际绘制图像,用alpha通道剪裁出角点。聚焦后,图像将正确缩放。应用于该层的。然后,要将alpha通道添加到其他层(如用于发光效果的层),我们需要设置;“masksFocusEffectToContents=true”

我根据以下内容对其进行了扩展:

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()来添加参数,以便在调用时定义阴影

缺点:

  • 边界的行为类似于角半径(它们在图像内部绘制)。 但我想我让它在某个地方发挥了作用,然后我进一步调查 丢失了更改
  • 我不确定这样做是否正确。我很有信心,一定有一些方法可以在几行中实现。在TVOS11中,苹果公司推出了圆形徽章(可动画和所有徽章),展示在。我就是找不到他们的样品

否则,TVOS12(目前测试版)引入了锁定。我设法以编程方式实现了它们,如中所示。

最终解决了吗?因为我在TVOS12Beta版上仍然遇到同样的问题,我已经浪费了3天时间试图找到解决方案。