将自定义UIView类添加到自定义UICollectionViewCell会有不同的结果

时间:2020-08-06 01:44:05

标签: ios swift uiview uicollectionviewcell uibezierpath

这可能不是最好的实现,所以我愿意接受其他建议。

我想创建一个具有自定义UICollectionView并绘制一个圆圈的UIView(类似于Watch的Activity圆圈。我遇到的问题是,出现(必须滚动)的第一个圆圈是在左上角的圆圈中绘制的,而不是居中,大小错误,而且我不确定需要更改什么。

cell

UIView

let shapeLayer = CAShapeLayer() override func draw(_ rect: CGRect) { var path = UIBezierPath() path = UIBezierPath(arcCenter: self.center, radius: (self.frame.height / 2)-10, startAngle: -CGFloat.pi / 2, endAngle: (2 * CGFloat.pi - CGFloat.pi / 2), clockwise: true) shapeLayer.path = path.cgPath shapeLayer.lineWidth = 6 shapeLayer.fillColor = UIColor.clear.cgColor shapeLayer.lineCap = .round shapeLayer.strokeEnd = 0 self.layer.addSublayer(shapeLayer) } func setProgress(progress: NSNumber) { let basicAnimation = CABasicAnimation(keyPath: "strokeEnd") basicAnimation.toValue = progress basicAnimation.duration = 1 basicAnimation.fillMode = .forwards basicAnimation.isRemovedOnCompletion = false shapeLayer.add(basicAnimation, forKey: "setProgress") } func setColor(color: UIColor) { shapeLayer.strokeColor = color.cgColor }

UICollectionViewCell

我使用情节提要将@IBOutlet weak var view: CustomViewClass! var key: String! 连接到UIView。

1 个答案:

答案 0 :(得分:1)

您正在override func draw(_ rect: CGRect) {中绘制一个圆,该圆在创建或显示视图时会调用一次。那时还没有通过自动布局来计算帧(来源,大小)。

cell for row atIndex中设置单元格时,您需要再次重新绘制圆圈。