SwiftUI Practice – MonthlyHeatMap
Custom heat map view built with SwiftUI utilizing a Grid to dynamically build the heat map for the desired month.
Customizations
- HeatMapItem color


Use in your code
HeatMapView(date: Date(), heatMapItems: heatMapItems)
HeatMapView
struct HeatMapView: View {
let columns = [GridItem(.adaptive(minimum: 28))]
var color: Color = Color(red: 60 / 255, green: 238 / 255, blue: 73 / 255)
var date = Date()
var heatMapItems: [HeatMapItem]
var title: String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM yyyy"
return dateFormatter.string(from: date)
}
var body: some View {
VStack(alignment: .leading) {
Text(title)
LazyVGrid(columns: columns, spacing: 5) {
ForEach(heatMapItems) { item in
HeatMapItemView(heatMapItem: item, color: color)
}
}
}
}
}
HeatMapItem
struct HeatMapItem: Identifiable {
let id: UUID = UUID()
let date: Date
let weight: Double
}
HeatMapItemView
struct HeatMapItemView: View {
var heatMapItem: HeatMapItem
var color: Color = .gray
var active: Bool {
heatMapItem.weight > 0.25 ? true : false
}
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 5)
.fill(active ? color.opacity(heatMapItem.weight) : .secondary.opacity(0.5))
.frame(width: 33, height: 23)
}
}
}
You can download the code for this project on GitHub