Swift - 如何在UICollectionViewCell内的UIImageView上添加图层并保持视差效果

时间:2017-01-25 14:17:36

标签: swift uiimageview parallax layer tvos

我正在研究一个tvOS项目。此项目包含UICollectionView,每个UIImageView内部UICollectionViewCell。首先,我在图像上使用adjustsImageWhenAncestorFocused,因为当单元格处于焦点并且我希望具有“视差”效果时它看起来很好。

当一个单元格处于焦点时,应该在图像上弹出一个标签(对于产品的标题),这不是一个问题。但我希望标题具有良好的可读性,这就是为什么我要在图像顶部放置渐变图层。

问题: 当我将渐变图层添加到UIImageView时,它会在它上面,但它不会“粘住”它。当用户进行视差操作时,它应该与图像一起使用,但它保持在其位置,原始图像确实在渐变层下移动

问题的屏幕截图 The actual problem

代码

let gradientLayer = CAGradientLayer()

override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {

    gradientLayer.colors = [UIColor(red:0.00, green:1.00, blue:1.00, alpha:0.3).cgColor, UIColor(red:1.00, green:0, blue:1.00, alpha:0.3).cgColor]
    gradientLayer.frame = productImageView.focusedFrameGuide.layoutFrame
    gradientLayer.isHidden = true
    self.productImageView.layer.addSublayer(self.gradientLayer)

    if (self.isFocused){
        gradientLayer.isHidden = false
    }
    else {
        gradientLayer.isHidden = true
    }

}

其他问题

这是一个错误吗?因为我还没弄清楚如何解决这个问题。我应该把它交给Apple吗?

1 个答案:

答案 0 :(得分:4)

Apple在tvOS 11中引入了overlayContentView。你应该将你的标签添加到这个视图中,它会为你做好准备!

有关详细信息,请参阅https://developer.apple.com/documentation/uikit/uiimageview/2882128-overlaycontentview?changes=latest_minor