Swift version: 5.10
You can draw lines in Core Graphics using move(to:)
and addLine(to:)
. The first function moves the Core Graphics path to a CGPoint
of your choosing, and the second function moves the path to a new point while also adding a line. Once you add in the required code to set up a context and choose a color, you can draw a triangle with this code:
let renderer1 = UIGraphicsImageRenderer(size: CGSize(width: 500, height: 500))
let img1 = renderer1.image { ctx in
ctx.cgContext.setStrokeColor(UIColor.white.cgColor)
ctx.cgContext.setLineWidth(3)
ctx.cgContext.move(to: CGPoint(x: 50, y: 450))
ctx.cgContext.addLine(to: CGPoint(x: 250, y: 50))
ctx.cgContext.addLine(to: CGPoint(x: 450, y: 450))
ctx.cgContext.addLine(to: CGPoint(x: 50, y: 450))
let rectangle = CGRect(x: 0, y: 0, width: 512, height: 512)
ctx.cgContext.addRect(rectangle)
ctx.cgContext.drawPath(using: .fillStroke)
}
Once you've mastered drawing basic lines, you can create neat effects by rotating the context as you draw, like this:
let renderer2 = UIGraphicsImageRenderer(size: CGSize(width: 512, height: 512))
let img2 = renderer2.image { ctx in
ctx.cgContext.setStrokeColor(UIColor.black.cgColor)
ctx.cgContext.translateBy(x: 256, y: 256)
var first = true
var length: CGFloat = 256
for _ in 0 ..< 256 {
ctx.cgContext.rotate(by: CGFloat.pi / 2)
if first {
ctx.cgContext.move(to: CGPoint(x: length, y: 50))
first = false
} else {
ctx.cgContext.addLine(to: CGPoint(x: length, y: 50))
}
length *= 0.99
}
ctx.cgContext.strokePath()
}
SAVE 50% All our books and bundles are half price for Black Friday, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
Available from iOS 4.0 – see Hacking with Swift tutorial 27
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.