Добавление пользовательского класса UIView в пользовательский UICollectionViewCell дает разные результаты - PullRequest
0 голосов
/ 06 августа 2020

Это может быть не лучшая реализация, поэтому я открыт для других предложений.

Я хочу создать UICollectionView с пользовательским UIView, который dr aws круг (похож на круг активности часов. Проблема, с которой я сталкиваюсь, заключается в том, что в каждом 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!

Я подключаю CustomViewClass к UIView с помощью раскадровка.

1 Ответ

1 голос
/ 06 августа 2020

Вы рисуете круг в override func draw(_ rect: CGRect) {, который вызывается один раз при создании или появлении вида. В этот момент рамка (исходная точка, размер) еще не была рассчитана с помощью автоматического раскладки.

Вам нужно снова нарисовать круг при настройке ячейки в cell for row atIndex.

...