以编程方式创建形状视图并在集合视图单元格上使用
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" 表示三角形层未显示。但其他视图显示正常。 (如标签)。我在单元格的内容视图中添加了。以上是关于以编程方式创建形状视图并在集合视图单元格上使用的主要内容,如果未能解决你的问题,请参考以下文章