以编程方式创建形状视图并在集合视图单元格上使用

Posted

技术标签:

【中文标题】以编程方式创建形状视图并在集合视图单元格上使用【英文标题】: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
    

【问题讨论】:

【参考方案1】:

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

你可以检查这些:

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

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

【讨论】:

"it is not working" 表示三角形层未显示。但其他视图显示正常。 (如标签)。我在单元格的内容视图中添加了。

以上是关于以编程方式创建形状视图并在集合视图单元格上使用的主要内容,如果未能解决你的问题,请参考以下文章

为啥在集合视图单元格中以编程方式创建的按钮需要是惰性变量?

以编程方式将按钮添加到集合视图单元格

在单元格上交互时集合视图不滚动

以编程方式将 UIImage 添加到集合视图单元中

iOS - 如何查看表格视图单元格上的“滑动删除”操作?

以编程方式滚动集合视图