CollectionViewCell绘制矩形

时间:2019-03-19 18:15:01

标签: ios swift uicollectionview

我正在尝试在集合视图单元格中绘制一个简单的轮廓圆。由于某些原因,只有第一个单元格被绘制,其余的则没有显示。

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")
    }
}

enter image description here

我在这里想念什么?

3 个答案:

答案 0 :(得分:0)

使用UICollectionViewDataSource方法cellForItemAt()将集合视图单元格配置为显示。单元将被重用,并且不会为每个“新”单元自动重绘。代替覆盖draw(rect),将子视图添加到单元格并在cellForItemAt()中配置子视图。

答案 1 :(得分:0)

您可能希望以不同的方式定义center点。 center点是在其 superview 坐标系中的点中指定的。尝试从其超级视图的坐标系转换单元格的center点,或者改用单元格的边界,并相应地调整xy的值。

let center = self.convert(self.center, from: self.superview)

let center = CGPoint(x: bounds.midX, y: bounds.midY)

CollectionViewCell

答案 2 :(得分:0)

创建一个符合UIView()的新类,并将bezierPath信息添加到其draw函数中。然后在collectionView单元内将此类子类化。可以正常工作。