xcode tvOS:聚焦时图像视图的圆角

9cbw7uwe  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(141)

我有一个图像视图,当包含视图获得焦点时,它将获得这个令人敬畏的tvOS焦点效果。问题是-它应该有圆角。现在这很容易做到:

imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true

字符串
我必须将图层的masksToBounds或图像视图的clipsToBounds设置为true(基本上是相同的),以便剪切图像的边缘-但一旦我这样做,焦点效果就不再起作用,因为它也会被剪切。
我在按钮上也遇到了或多或少的问题,但由于对焦效果比图像视图简单得多(只有缩放和阴影),我只是自己实现了它,但这不是图像视图的选项,所有的效果都应用了(移动, Flink 等......)
有更简单的方法吗?我错过了什么吗?我不能是唯一一个想搞清楚这是怎么回事的人!?:)

jum4pzuy

jum4pzuy1#

我找到了一个替代的解决办法。我们可以做的是实际绘制图像,用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()来添加参数,以便在调用时定义阴影。
缺点:

  • 边框的行为类似于cornerRadius(在图像内部绘制)。但我认为我使它工作的地方,然后进一步调查我失去了变化
  • 我不确定这是正确的方法。我很有信心一定有一些方法在那里做它在几行。在tvOS 11中,苹果推出了圆形徽章(可动画和所有),显示在WWDC 2017。我只是找不到他们的样本

另外,tvOS 12(目前为beta)引入了锁定。我设法以编程方式实现了它们,如this answer所示。

wnavrhmk

wnavrhmk2#

https://forums.developer.apple.com/thread/20513
我们也面临着同样的问题。当你圆了角落,你可以看到“闪耀”仍然有一个矩形形状。
我在多伦多的技术会谈上向Dev福音派展示了这个问题,他们说这是一个bug。已报告并打开rdar://23846376

gg58donl

gg58donl3#

2022年2023年……

幸运的是,TVPosterView现在工作得很好。这可能是你最好的解决办法。只需在TVPosterView上设置.image。 您也可以使用UICardView`来实现效果。(在这种情况下,只需将UIImageView放在卡视图中。别忘了关闭 * 图像视图 * 上的“adjust on ancestor focus”和“user interaction enabled”,否则当卡片视图扩展时,它会“加倍扩展”!)

  • 有了TVPosterView,当你玩遥控器时,你会得到“两种”的三维效果。
  • UICardView它是不同的,你只有“一个”的3D效果时,玩弄遥控器。试试看,看看有什么不同。

不过……

  • 使用TVPosterView你会遇到一个奇怪的问题(就像仅仅是一个图像视图一样),图像不能正确地缩放,它忽略了缩放模式。
  • 使用UICardView,图像将像在iOS上一样正常缩放(无论您告诉它如何缩放)

相关问题