我正在尝试在集合视图单元格中绘制一个简单的轮廓圆。由于某些原因,只有第一个单元格被绘制,其余的则没有显示。
class UserCell: UICollectionViewCell {
override func draw(_ rect: CGRect) {
let center = CGPoint(x: self.center.x - 1, y: 41)
let circularPath = UIBezierPath()
circularPath.addArc(withCenter: center, radius: 36, startAngle: 0, endAngle: CGFloat(2 * Double.pi), clockwise: true)
UIColor.red.setStroke()
circularPath.lineWidth = 2
circularPath.stroke()
}
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.white
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我在这里想念什么?
答案 0 :(得分:0)
使用UICollectionViewDataSource方法cellForItemAt()将集合视图单元格配置为显示。单元将被重用,并且不会为每个“新”单元自动重绘。代替覆盖draw(rect),将子视图添加到单元格并在cellForItemAt()中配置子视图。
答案 1 :(得分:0)
您可能希望以不同的方式定义center
点。 center
点是在其 superview 坐标系中的点中指定的。尝试从其超级视图的坐标系转换单元格的center
点,或者改用单元格的边界,并相应地调整x
和y
的值。
let center = self.convert(self.center, from: self.superview)
let center = CGPoint(x: bounds.midX, y: bounds.midY)
答案 2 :(得分:0)
创建一个符合UIView()的新类,并将bezierPath信息添加到其draw函数中。然后在collectionView单元内将此类子类化。可以正常工作。