проблема с переворачиванием CoreGraphics вверх дном в UIView - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблемы с переворотом дуги с использованием базовых графических интерфейсов API в UIView.

Я понимаю, что система координат отличается.UIkit помогает мне на полпути, трансформируя систему координат для размещения предоставленного мною центра в базовую графическую систему координации.Я предполагаю, что когда я рисую дугу, используя базовую графику API, она рисует дугу, используя основную графическую систему координат?

Я могу просто изменить по часовой стрелке на ложь, и это даст мне то, что мне нужно.Это хорошая практика?

Я играл с вращением и масштабом CGAffineTransform, он не дал мне то, что мне нужно.Есть ли способ перевернуть дугу, не изменяя тактику ложным?

Я также использовал UIBezierPath, чтобы нарисовать другую дугу так, как я хочу.Как я понимаю, UIBezierPath - это оболочка для CoreGraphics.Я хотел бы знать, как я могу сделать это, используя чистый CoreGraphics API.

Дополнительный вопрос: Мой последний вызов функции path.stroke() рисует путь UIBezierPath и CGPath arcPath1.Как так?0.o

override func draw(_ rect: CGRect) {
    guard let CGContext = UIGraphicsGetCurrentContext() else { return }
    let boxPath = CGMutablePath()

    boxPath.addLines(between:
    [CGPoint(x: rect.width / 2, y: rect.height),
     CGPoint(x: rect.width / 2, y: rect.height / 2),
     CGPoint(x: rect.width, y: rect.height / 2)])

    CGContext.beginPath() // begin new path
    CGContext.addPath(boxPath.copy(strokingWithWidth: 5.0, lineCap: .square, lineJoin: .round, miterLimit: 0)) // add new path

    CGContext.setFillColor(UIColor.blue.cgColor)
    CGContext.fillPath()

    let arcPath1 = CGMutablePath()
    arcPath1.addArc(center: CGPoint(x: rect.width / 4, y: rect.height / 4 * 3),
                    radius: 20.0,
                    startAngle: CGFloat(180).degreesToRadians,
                    endAngle: CGFloat(360).degreesToRadians,
                    clockwise: true,
                    transform: CGAffineTransform(rotationAngle: CGFloat(0).degreesToRadians))


    CGContext.beginPath()
    CGContext.addPath(arcPath1)
    CGContext.setStrokeColor(UIColor.blue.cgColor)

    let path = UIBezierPath(arcCenter: CGPoint(x: rect.width / 4 * 3, y: rect.height / 4 * 3),
                            radius: 20.0,
                            startAngle: CGFloat(180).degreesToRadians,
                            endAngle: CGFloat(360).degreesToRadians,
                            clockwise: true)

    path.lineWidth = 5.0
    path.stroke()
}

Дуги, слева: CG, справа: Безье

...