将 CAGradientLayer 应用于单元格时,如何将其中一个单元格的视图向前移动,使其不受渐变的影响?

When applying CAGradientLayer to a cell, How can I bring one of the cells' views forward so it is not affected by the gradient?

我有一个表格视图单元格,其中有一个文本标签。我使用以下代码对单元格应用了渐变:

if(cell.layer.sublayers.count == 2){ 
            let gradientLayer = CAGradientLayer()
            gradientLayer.colors = [UIColor.clearColor().CGColor, UIColor(red: 0, green: 0, blue: 0, alpha: 1.0).CGColor]
            gradientLayer.locations = [0.6, 1.0]
            gradientLayer.frame = cell.bounds
            cell.layer.insertSublayer(gradientLayer, atIndex: UInt32(1))
        }

该单元格由图像视图和标签组成。我考虑过将渐变添加到 imageView,但是因为我在 imageView 中使用了视差效果,所以它导致渐变在滚动时移出位置。

如何将标签放在CAGradientLayer应用的渐变前面?或者如何让标签不受渐变的影响?

为您的单元格创建一个子类并覆盖 layerClass 方法,使其 returns CAGradientLayer

然后不添加子图层,直接将渐变添加到self.layer。您可以在单元格的 initawakeFromNib 方法中完成。

override class func layerClass() -> AnyClass {
    return CAGradientLayer.self
}

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier!)

    let gradientLayer: CAGradientLayer = self.layer as CAGradientLayer
    gradientLayer.colors = [UIColor.clearColor().CGColor, UIColor(red: 0, green: 0, blue: 0, alpha: 1.0).CGColor]
    gradientLayer.locations = [0.6, 1.0]

}