Updated for Xcode 12.0
SwiftUI’s paths don’t need to be continuous, isolated shapes, and can instead be multiple rectangles, ellipses, and more, all combined into one.
As an easy way of demonstrating this, we could write a shape that creates checkerboard patterns by building up a series of rectangles of a set number of rows and columns, like this:
struct Checkerboard: Shape {
let rows: Int
let columns: Int
func path(in rect: CGRect) -> Path {
var path = Path()
// figure out how big each row/column needs to be
let rowSize = rect.height / CGFloat(rows)
let columnSize = rect.width / CGFloat(columns)
// loop over all rows and columns, making alternating squares colored
for row in 0 ..< rows {
for column in 0 ..< columns {
if (row + column).isMultiple(of: 2) {
// this square should be colored; add a rectangle here
let startX = columnSize * CGFloat(column)
let startY = rowSize * CGFloat(row)
let rect = CGRect(x: startX, y: startY, width: columnSize, height: rowSize)
path.addRect(rect)
}
}
}
return path
}
}
Now we can use that shape by passing in rows and columns, then giving it a sensible frame:
struct ContentView: View {
var body: some View {
Checkerboard(rows: 16, columns: 16)
.fill(Color.red)
.frame(width: 200, height: 200)
}
}
SPONSORED Would you describe yourself as knowledgeable, but struggling when you have to come up with your own code? Fernando Olivares has a new book containing iOS rules you can immediately apply to your coding habits to see dramatic improvements, while also teaching applied programming fundamentals seen in refactored code from published apps.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.