I've probably written aspect ratio code a hundred times. Each time I approach the topic, I write a quick and dirty implementation, get it wrong, debug it with pencil & paper, and then fix my mistake.
Since this is something I need sparingly, I figure it's not worth pulling in a library, or trying to find a reference implementation.
A couple years ago I came across
AVMakeRect, which is a built-in function to do exactly that!
Usage is simple:
let screenRect = CGRect(x: 0, y: 0, width: 1024, height: 768) let aspectRatio = CGSize(width: 16, height: 9) AVMakeRect(aspectRatio: aspectRatio, insideRect: screenRect)
This returns to you the largest rect that fits inside the specified rect, while constraining the rect to the aspect ratio. Extra super bonus points: It even centers the rect for you.
You can find the docs here.
Cheers to the engineer who added this. 🍻