Easier use of variable fonts with AppKit, UIKit and SwiftUI. For iOS, macOS, tvOS, watchOS and visionOS
Extends AppKit's NSFont, UIKit's UIFont and SwiftUI's Font with variable font features. Couldn't be easier!
let font = NSFont(name: "Amstelvar", size: 20, axes: [
.weight: 650,
.opticalSize: 144,
"GRAD": 500,
])let scienceGothic = UIFont(name: "ScienceGothic", size: 20)!
let slanted = scienceGothic.withAxis(.slant, value: -10)let tiltWarp = NSFont(name: "TiltWarp-Regular", size: 100)!
let axes = tiltWarp.allAxes()
print(axes)
/*
[VariableFonts.FontAxis(
id: 1481789268,
name: "XROT",
description: "Rotation in X",
minimumValue: -45.0,
maximumValue: 45.0,
defaultValue: 0.0),
etc...]
*/Text("Hello world")
.font(.custom(name: "Fraunces", size: 40, axes: [
.weight: 900,
"SOFT": 100,
"WONK": 1,
]))let nunito = UIFont(name: "NunitoSans", size: 20)!
let axes = nunito.allAxes()
// Creates a UIFont with all axes set to their maximum value.
let megaNunito = nunito.withAxes(
Dictionary(uniqueKeysWithValues: axes.map { axis in
return (axis.id, axis.maximumValue)
})
)The dictionary you supply to configure the axes use FontAxis.Name as keys. This type comes with a set of well known axis names. I.e. .weight (wght), .width (wdth), etc. This type is ExpressibleByStringLiteral. String literals can be used for custom axis names.