Круг не рисуется в центре обзора - PullRequest
1 голос
/ 09 мая 2020

Итак, я пытаюсь нарисовать круг в центре UIView.

class CircleView: UIView {

    let shapeLayer = CAShapeLayer()

    override func draw(_ rect: CGRect) {

        let circularPath = UIBezierPath(arcCenter: self.center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)

        shapeLayer.path         = circularPath.cgPath
        shapeLayer.strokeColor  = Colors.darkPurple.cgColor
        shapeLayer.fillColor    = UIColor.white.cgColor
        shapeLayer.lineWidth    = 10
        shapeLayer.strokeEnd    = 0

        layer.addSublayer(shapeLayer)

        addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
    }

    @objc private func handleTap() {
        print("....Animating Circle....")

        let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
        basicAnimation.toValue               = 1
        basicAnimation.duration              = 2
        basicAnimation.fillMode              = .forwards
        basicAnimation.isRemovedOnCompletion = false

        shapeLayer.add(basicAnimation, forKey: "circleAnimation")
    }
}

Тем не менее, круг по какой-то причине нарисован полностью в правом нижнем углу представления, хотя я ' Мы указали, что arcCenter является центром вида.

enter image description here

1 Ответ

0 голосов
/ 09 мая 2020

Пожалуйста, измените вашу центральную точку .. Вы видите центральную точку в соответствии с ее супервизором .. вот почему ваш круг не был центром вашего обзора

let circularPath = UIBezierPath(arcCenter: CGPoint(x: bounds.midX, y: bounds.midY), radius: bounds.midX/2, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)

Лучше не фиксировать радиус вашего обзора. .. сделайте это динамическим c .. как будто я использовал половину вида ... теперь это связано с размером вида

Также для рисования круга используйте границу линии для округления

shapeLayer.lineCap = .round

Надеюсь, это вам поможет

...