Skip to content

Instantly share code, notes, and snippets.

@Obbut
Created November 1, 2024 11:25
Show Gist options
  • Save Obbut/7be2e6538c9dabeaffdee9f714bcca39 to your computer and use it in GitHub Desktop.
Save Obbut/7be2e6538c9dabeaffdee9f714bcca39 to your computer and use it in GitHub Desktop.
Unbeatable Logo Shape
import SwiftUI
struct ULogoShape: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
// Original SVG width and height for normalization
let originalWidth: CGFloat = 60
let originalHeight: CGFloat = 70
// Uniform scale factor based on the minimum of the width or height
let scale = min(rect.width / originalWidth, rect.height / originalHeight)
// Offset to center the shape in the frame
let offsetX = (rect.width - originalWidth * scale) / 2
let offsetY = (rect.height - originalHeight * scale) / 2
path.move(to: CGPoint(x: 17.7777799 * scale + offsetX, y: 17.5625016 * scale + offsetY))
path.addLine(to: CGPoint(x: 17.7777799 * scale + offsetX, y: 51.0016934 * scale + offsetY))
path.addLine(to: CGPoint(x: 18.6666683 * scale + offsetX, y: 51.8873248 * scale + offsetY))
path.addLine(to: CGPoint(x: 41.3227332 * scale + offsetX, y: 51.8873248 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 42.2222239 * scale + offsetX, y: 50.7865817 * scale + offsetY),
control1: CGPoint(x: 41.8560484 * scale + offsetX, y: 51.8873248 * scale + offsetY),
control2: CGPoint(x: 42.2222239 * scale + offsetX, y: 51.3179439 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 42.2222239 * scale + offsetX, y: 9.74353097 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 43.7396473 * scale + offsetX, y: 9.11729205 * scale + offsetY),
control1: CGPoint(x: 42.2222239 * scale + offsetX, y: 8.95451542 * scale + offsetY),
control2: CGPoint(x: 43.1796795 * scale + offsetX, y: 8.55937396 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 59.218951 * scale + offsetX, y: 24.5399084 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 60 * scale + offsetX, y: 26.4186214 * scale + offsetY),
control1: CGPoint(x: 59.719048 * scale + offsetX, y: 25.0381743 * scale + offsetY),
control2: CGPoint(x: 60 * scale + offsetX, y: 25.7139672 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 60 * scale + offsetX, y: 67.4616703 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 58.4825728 * scale + offsetX, y: 68.087913 * scale + offsetY),
control1: CGPoint(x: 60 * scale + offsetX, y: 68.2506849 * scale + offsetY),
control2: CGPoint(x: 59.0425416 * scale + offsetX, y: 68.6458263 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 45.961875 * scale + offsetX, y: 55.6130661 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 44.444444 * scale + offsetX, y: 56.239305 * scale + offsetY),
control1: CGPoint(x: 45.4019063 * scale + offsetX, y: 55.0551479 * scale + offsetY),
control2: CGPoint(x: 44.444444 * scale + offsetX, y: 55.4502896 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 44.444444 * scale + offsetX, y: 68.7143671 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 43.5555575 * scale + offsetX, y: 69.5999985 * scale + offsetY),
control1: CGPoint(x: 44.444444 * scale + offsetX, y: 69.2034906 * scale + offsetY),
control2: CGPoint(x: 44.0464769 * scale + offsetX, y: 69.5999985 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 18.145969 * scale + offsetX, y: 69.5999985 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 17.5174302 * scale + offsetX, y: 69.3406022 * scale + offsetY),
control1: CGPoint(x: 18.145969 * scale + offsetX, y: 69.5999985 * scale + offsetY),
control2: CGPoint(x: 17.910221 * scale + offsetX, y: 69.5066907 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 0.781049029 * scale + offsetX, y: 52.6655136 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 0 * scale + offsetX, y: 50.7868006 * scale + offsetY),
control1: CGPoint(x: 0.280951852 * scale + offsetX, y: 52.1672478 * scale + offsetY),
control2: CGPoint(x: 0 * scale + offsetX, y: 51.4914548 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 0 * scale + offsetX, y: 0.887409884 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 1.51743096 * scale + offsetX, y: 0.261171347 * scale + offsetY),
control1: CGPoint(x: 0 * scale + offsetX, y: 0.0983945064 * scale + offsetY),
control2: CGPoint(x: 0.957459424 * scale + offsetX, y: -0.29674674 * scale + offsetY)
)
path.addLine(to: CGPoint(x: 16.9967309 * scale + offsetX, y: 15.6837877 * scale + offsetY))
path.addCurve(
to: CGPoint(x: 17.7777799 * scale + offsetX, y: 17.5625016 * scale + offsetY),
control1: CGPoint(x: 17.496828 * scale + offsetX, y: 16.1820535 * scale + offsetY),
control2: CGPoint(x: 17.7777799 * scale + offsetX, y: 16.8578474 * scale + offsetY)
)
return path
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment