Преобразование кода CAShapeLayer из iOS в OSX - PullRequest
0 голосов
/ 19 июня 2019

У меня есть код, который рисует дугу в iOS и преобразовал его для использования в macOS.

Вот код iOS, который рисует дугу.


    let circleCenter = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
    let circlePath = UIBezierPath(arcCenter: circleCenter, radius: self.frame.width / 2, startAngle: -CGFloat.pi / 2, endAngle: 1.5 * CGFloat.pi, clockwise: true)

    let progress = CAShapeLayer()
    progress.path = circlePath.cgPath
    progress.strokeColor = UIColor.green.cgColor
    progress.strokeEnd = 0.4
    progress.lineCap = .round
    progress.lineWidth = 15
    progress.fillColor = UIColor.clear.cgColor
    self.layer.addSublayer(progress)

Вот код, который я преобразовал для использования в macOS.


    let circle = NSBezierPath()
    circle.appendArc(withCenter: circleCenter, radius: self.frame.width / 2, startAngle: rad2deg(-CGFloat.pi / 2), endAngle: rad2deg(1.5 * CGFloat.pi))

    let progress = CAShapeLayer()
    progress.path = circle.cgPath
    progress.strokeColor = NSColor.green.cgColor
    progress.strokeEnd = 0.4
    progress.lineCap = .round
    progress.lineWidth = 15
    progress.fillColor = NSColor.clear.cgColor
    self.layer?.addSublayer(progress)

Код работает вmacOS, однако, результирующий рисунок переворачивается.Я понимаю, что начальные координаты в iOS отличаются от macOS, и код macOS должен быть изменен, чтобы справиться с этим.Каков наилучший способ достичь этого?Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 19 июня 2019

Приведенный ниже ответ от El Tomato сработал.

переопределить var isFlipped: Bool {return true}

...