2015-01-11 16 views
1

我有一個在其中有文本標籤的tableview單元格。我已經使用此代碼向單元格應用了漸變:將CAGradientLayer應用於單元格時,如何將其中一個單元格的視圖向前移動,以便不受漸變的影響?

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應用的漸變前面?或者我怎樣才能讓標籤不受漸變的影響?

+0

你是從細胞的實施外部施加的梯度細胞? – Abizern

+0

這是在tableView(_:cellForRowAtIndexPath)函數內 –

回答

1

爲您的單元格創建子類並覆蓋layerClass方法,以便它返回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] 

}

+0

我對你說「直接將漸變添加到self.layer」的部分感到困惑。「我已經創建了UITableCell的一個子類,因爲我創建了一個自定義單元格。每當我嘗試訪問'insertSublayer'的第二個參數的圖層時,我都會遇到運行時錯誤。如何在不使用'insertSublayer'方法的情況下將漸變插入'self.layer'? –

+0

只需將'self.layer'投射到'CAGradientLayer'。看到我編輯的答案。如果使用storyboard或.xib文件,請在'awakeFromNib:'中添加漸變。 –

相關問題