У меня проблемы с переворотом дуги с использованием базовых графических интерфейсов 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, справа: Безье