2016-09-01 4 views
2

テーブルビューセルに透明なグラデーションカラーを設定しようとしています。すべてが最初の負荷でうまく動作しますが、各スクロールで色が再びロードされ、グラデーションが各スクロールで暗くなり、スクロールごとにテーブルビューが遅くなるようです。以下のようなあなたの携帯にサブビューを追加し、ビューコントローラに接続しテーブルビューセルでアルファのグラデーションが各スクロールで暗くなります

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    cell.contentView.layer.insertSublayer(gradient(cell.bounds), atIndex: 1) 
} 

func gradient(frame:CGRect) -> CAGradientLayer { 
    let layer = CAGradientLayer() 
    layer.frame = frame 
    layer.startPoint = CGPointMake(0,0.68) 
    layer.endPoint = CGPointMake(0,0.75) 
    layer.colors = [UIColor.clearColor().CGColor,UIColor.blackColor().colorWithAlphaComponent(0.2).CGColor] 
    return layer 
} 
+0

セル再利用不可能...と思います。何度も何度もそれを割り当てているので、ビューをスクロールすると暗くなります –

+0

セルは再利用可能なオブジェクトなので、レイヤーを初期化するとレイヤーを一度挿入する必要があります*( 'tableView:cellForRowAtIndexPath:'カスタムセルクラスを作成する必要はありません)*。次に、問題のセルの 'willDisplayCell'メソッドまたは' layoutSubviews'メソッドでレイヤーのフレームを更新することができます。 – ozgur

+0

これは間違いなく細胞を再利用する際の問題です。あなたがスクロールするたびにセルを再利用する場合(セル)とセルの透明度をcell.trasparency + 0.1(擬似コード)に設定すると、透明度が増加することを覚えておいてください。 – BlackM

答えて

1

1)

enter image description here

class MyCell : UITableViewCell {  
    @IBOutlet weak var bgView: UIView!   
} 

2) - :ここにグラデーションカラーを実装するための私のコードですからあなたの行を削除するwillDisplayCell方法あなたのところに移動cellForRowAt()メソッドは、次のように更新されました:

override func tableView(tableView: UITableView, cellForRowAtIndexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell 

    if(cell.bgView.layer.sublayers == nil) { 
     cell.bgView.layer.insertSublayer(gradient(frame: cell.bounds), at: 1) 
    } 
    return cell 
} 
+0

申し訳ありませんが、ソフトの不一致に悩まされたとき、私はSwift 3.0に展開していました。 – pedrouan

+1

おかげで、これは本当に問題を解決しました! – Parion

関連する問題