保持纵横比,将CGSize调整到最大

F.S*_*SO4 6 c algorithm cocoa-touch objective-c swift

我有一个CGSize对象需要发送到我的服务器.我可以发送到服务器的最大尺寸是900*900(900宽度/ 900高度).

有一些对象比900*900更大,我想编写一个函数来调整它们的最大值(正如我已经说过的,最大值是900*900)但要保持宽高比.

例如:如果我有一个宽度为1,000px且高度为1,000px的对象,我希望该函数返回一个900*900对象.如果我有一个1920px宽度和1080px高度的对象,我希望它能保持比率,尽可能返回最大尺寸.

任何人都知道我该怎么做?

谢谢!

OriginalUser2回答:

我试过这段代码:

let aspect = CGSizeMake(900, 900)
let rect = CGRectMake(0, 0, 1920, 1080)

let final = AVMakeRectWithAspectRatioInsideRect(aspect, rect)
Run Code Online (Sandbox Code Playgroud)

final是的{x 420 y 0 w 1,080 h 1,080},我无法理解为什么x = 420,但无论如何1080*1080不是在相同的宽高比1920*1080,它比它更大900*900.

你能解释一下吗?

Ham*_*ish 8

就像我在评论中所说,您可以使用AVMakeRect(aspectRatio:insideRect:)AVFounation框架中的函数来执行此操作.

代码的问题在于值是错误的.该insideRect:参数应该是适合你的尺寸的矩形 -而aspectRatio:应该是你想同时保持纵横比进行缩放原始大小.

例如:

import AVFoundation

// Original size which you want to preserve the aspect ratio of.
let aspect = CGSize(width: 1920, height: 1080)

// Rect to fit that size within. In this case you don't care about fitting
// inside a rect, so pass (0, 0) for the origin.
let rect = CGRect(x: 0, y: 0, width: 900, height: 900)

// Aspect fitted size, in this case (900.0, 506.25)
let result = AVMakeRect(aspectRatio: aspect, insideRect: rect).size
Run Code Online (Sandbox Code Playgroud)

(注意该函数已AVMakeRect(aspectRatio:insideRect:)在Swift 3中重命名为)