【问题标题】:Programmatically create shape view and use on collection view cell以编程方式创建形状视图并在集合视图单元格上使用
【发布时间】:2018-02-05 19:37:36
【问题描述】:

我使用 swift 以编程方式创建自定义视图。我用 CAShapeLayer 创建了三角形视图,我使用添加到视图控制器上。它工作正常。

但我在集合视图单元格中使用三角形自定义视图,它不起作用。 这是我的自定义视图。如何在集合视图单元格中使用它。

final class CardView: UIView {

    lazy var countLB: UILabel = {
        let label = UILabel()
        label.font = UIFont(name: "Helvetica", size: 120)
        label.textColor = UIColor.red
        label.textAlignment = .center
        label.text = "500"
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }()

    lazy var topTriangleView: UIView = {
        let view = UIView()
        view.layer.addSublayer(shapeLayer)
        return view
    }()

    lazy var trianglePath: UIBezierPath = {
        let path = UIBezierPath()
        path.move(to: CGPoint(x: 0, y: 0))
        path.addLine(to: CGPoint(x: 0, y: frame.size.height))
        path.addLine(to: CGPoint(x: frame.size.width, y: 0))
        path.close()
        path.fill()
        return path
    }()

    lazy var shapeLayer: CAShapeLayer = {
        let shape = CAShapeLayer()
        shape.path = trianglePath.cgPath
        shape.fillColor = UIColor.yellow.cgColor
        return shape
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    override func draw(_ rect: CGRect) {
        super.draw(rect)
        addSubview(topTriangleView)
        countLB.layer.zPosition = 1
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        assertionFailure()
    }

    private func setupView() {
        addSubview(countLB)
        layer.cornerRadius = 8
        layer.masksToBounds = true
    }

    override func updateConstraints() {
        super.updateConstraints()
        countLB.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        countLB.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
    }
}

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell cashapelayer


    【解决方案1】:

    “它不工作”是什么意思?

    你可以检查这些:

    您应该将 CardView 实例添加到 UICollectionViewCell 内的 contentView,而不是视图本身。

    也许没有调用 updateConstraints,你可以添加一个 print 语句来检查是否是问题所在。

    【讨论】:

    • "it is not working" 表示三角形层未显示。但其他视图显示正常。 (如标签)。我在单元格的内容视图中添加了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多