如何在UIViewTable中向可扩展单元格添加渐变图层?

时间:2016-07-21 21:12:13

标签: ios swift uitableview autolayout cagradientlayer

我有一个UITableView,它具有相同高度的单元格。当用户点击其中一个单元格然后单元格将在其底部展开时,它将显示新的部分,而不是在点击之前显示的原始单元格。如果细胞是A,B,C,D

然后点击B将使UITableView看起来像

A,B + b,C,D

(例如,如果用户点击C,则新视图'c'可以与'b'的高度不同)

其中b是与单元格B相关的UIView。

'b'中的数据将随动画扩展到其高度。

我使用autolayout构建了所有应用程序,并且我使用自动布局自动调整单元格。如何在“b”的背面添加渐变,该渐变将与“b”的内容及其上的动画一起展开?

由于

添加了一个我编写的类来包含UIView中的渐变,正如Evgeny Karkan建议的那样:

import UIKit

class UIGradient: UIView {

    var colors: [UIColor]!

    init(colors: [UIColor]) {

        super.init(frame: CGRectZero)

        self.colors = colors

        self.translatesAutoresizingMaskIntoConstraints = false

    }

    override func layoutSubviews() {

        super.layoutSubviews()



        DelayUtil.delay(0.1) {

            self.addGradient(self.colors)

        }



    }

    override func didMoveToSuperview() {

        if self.superview != nil {

            self.stretchToBoundsOfSuperView()

            self.superview?.sendSubviewToBack(self)

        }

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}


extension UIView {


    func addGradient(colors: [UIColor]) -> CAGradientLayer {

        let gradient = CAGradientLayer()
        gradient.frame = self.bounds
        gradient.startPoint = CGPointMake(0, 0.5)
        gradient.endPoint = CGPointMake(1.0, 0.5)

        if colors.count >= 2 {

            gradient.colors = [colors[0].CGColor, colors[1].CGColor]

        }

        self.layer.insertSublayer(gradient, atIndex: 0)
        return gradient

    }

}

0 个答案:

没有答案