// // BadgeBackground.swift // Landmarks // Adjusted to compensate for gradient fill only paritally filling the hexagon shape // import SwiftUI struct BadgeBackground: View { var body: some View { GeometryReader { geometry in Path { path in var width: CGFloat = min(geometry.size.width,geometry.size.height) let height = width let xScale: CGFloat = 0.832 let xOffset = (width * (1.0 - xScale)) / 2.0 width *= xScale path.move( to: CGPoint( x: width * 0.95 + xOffset, y: height * (0.20 + HexagonParameters.adjustment) ) ) //add curves ot corners HexagonParameters.segments.forEach { segment in path.addLine( to: CGPoint( x: width * segment.line.x + xOffset, y: height * segment.line.y ) ) path.addQuadCurve( to: CGPoint( x: width*segment.curve.x + xOffset, y: height*segment.curve.y ), control: CGPoint( x:width*segment.control.x + xOffset, y:height*segment.control.y ) ) } } .fill(.linearGradient( /*adding the gradient resulted in the hexagon not being completely filled with color. Added a stroke below to show the shape of the Hexagon. Verified duplication of issue at https://developer.apple.com/forums/thread/773991*/ Gradient(colors: [Self.gradientStart,Self.gradientEnd]), startPoint: UnitPoint(x: 0.5, y: 0), endPoint: UnitPoint(x: 0.5, y: 0.6) ) ) //add a stroke to see the shape of the hexagon regardless of gradient or solid fill. .stroke(.blue, lineWidth: 1) } .aspectRatio(contentMode: .fit) } /*Gradient fill color range*/ static let gradientStart: Color = Color(red: 239.0 / 255, green: 120.0 / 255, blue: 221.0 / 255) static let gradientEnd: Color = Color(red: 239.0 / 255, green: 172.0 / 255, blue: 120.0 / 255) } #Preview { BadgeBackground() }