这可能不是最好的实现,所以我愿意接受其他建议。
我想创建一个具有自定义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。
答案 0 :(得分:1)
您正在override func draw(_ rect: CGRect) {
中绘制一个圆,该圆在创建或显示视图时会调用一次。那时还没有通过自动布局来计算帧(来源,大小)。
在cell for row atIndex
中设置单元格时,您需要再次重新绘制圆圈。