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.
你能解释一下吗?
就像我在评论中所说,您可以使用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中重命名为)