2017-08-05 5 views
1

ビューコントローラにテーブルビューを挿入しました。テーブルビューのセルにどのようにグラデーションの背景を付けることができますか?各セルを個別に編集して、各セルに異なる色のグラデーションの背景を付けることはできますか?たとえば、各セルにtrainingLevels配列内のインデックスの後にラベルが付けられている場合、それぞれの色のグラデーションの背景がどこにあるかをどのようにして作成できますか?あなたが最初のグラデーションを作成し、以下のようなあなたのセルにサブレイヤを挿入する必要が細胞をグラデーションの背景にする方法は?

import UIKit 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var trainingLevels = ["Ball Handling", "Shooting", "Defense", "Advanced Drills", "Vertimax Drills", "Full Workouts", "BHB Products"] 


@IBOutlet weak var tableView: TableView! 


func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
    cell.backgroundColor = UIColor.clear 
} 

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 

    return trainingLevels.count 
} 


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "bell") 
    cell.textLabel?.text = trainingLevels[indexPath.row] 

    //cell details 
    cell.backgroundColor = UIColor.black 
    cell.textLabel?.textColor = UIColor.white 



    return cell 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 

    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

サブクラス 'UITableViewCell'と勾配層を介して背景を設定します。 – vadian

+0

各セルにグラデーションを設定する必要がありますか?背景にグラデーションカラーを設定するだけで、それぞれのセルで同じ効果が得られます。私によれば、各セルにグラデーションを設定すると遅くなることがあります。 –

答えて

1

は、ここに私のコードです。

func gradient(frame:CGRect) -> CAGradientLayer { 
    let layer = CAGradientLayer() 
    layer.frame = frame 
    layer.startPoint = CGPointMake(0,0.5) 
    layer.endPoint = CGPointMake(1,0.5) 
    layer.colors = [ 
    UIColor.red.cgColor,UIColor.blue.cgColor] 
    return layer 
} 

//Now on your tableViewcell do below 

cell.layer.insertSublayer(gradient(cell.bounds), atIndex:0) 
+0

'cell.layer.insertSublayer(gradient(cell.bounds) atIndex:0) '行はUITableViewCellのawakeFromNib()関数のサブクラスの中に置かれ、' cell'を 'self'に置き換えます。その行がtableView(cellForRowAt :)関数内にあると、スクロールラグが簡単に発生する可能性があります。 – RPatel99

+0

'cell'を' self'で置き換える方法は? –

+0

はまた、 'cgcolor'はswiftで利用できないと言っています –

0

あなたはのUIViewの拡張を作成することができます

extension UIView{ 
    func addGradientBackground(firstColor: UIColor, secondColor: UIColor){ 
     clipsToBounds = true 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor] 
     gradientLayer.frame = self.bounds 
     gradientLayer.startPoint = CGPoint(x: 0, y: 0) 
     gradientLayer.endPoint = CGPoint(x: 0, y: 1) 
     print(gradientLayer.frame) 
     self.layer.insertSublayer(gradientLayer, at: 0) 
    } 
} 

そして、あなただけで電池内部の

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.addGradientBackground(firstColor: .green, secondColor: .blue) 
} 
関連する問題