35

我想确保 aCGSize小于或等于 another CGSize。像:

CGSize firstSize = CGSizeMake(1.0,1.0);
CGSize secondSize = CGSizeMake(5.0,3.0);
if(firstSize <= secondSize){
    Do Stuff . . .
}

我将如何比较这个?

4

7 回答 7

118

要检查是否相等,您可以使用Apple的CGSizeEqualToSize函数。

CGSize firstSize = CGSizeMake(1.0,1.0);
CGSize secondSize = CGSizeMake(5.0,3.0);

if(CGSizeEqualToSize(firstSize, secondSize)) {
    //they are equal
}else{
    //they aren't equal
}
于 2012-12-05T13:35:04.443 回答
18

确定是否firstSize适合secondSize不旋转:

if(firstSize.width <= secondSize.width && firstSize.height <= secondSize.height)
于 2012-06-19T19:05:37.090 回答
5

以下函数确定第一个参数中 CGSize 的矩形是否完全适合第二个参数中 CGSize 的矩形范围内或范围内。

- (BOOL)size:(CGSize)smallerSize isSmallerThanOrEqualToSize:(CGSize)largerSize {

    return CGRectContainsRect(
        CGRectMake(0.0f, 0.0f, largerSize.width, largerSize.height),
        CGRectMake(0.0f, 0.0f, smallerSize.width, smallerSize.height)
    );
}

与其用难以阅读的条件语句自己编写完整的逻辑,您可以使用名称具有描述性的内置内联辅助函数。

虽然我还没有进行研究,但这种方法的执行速度可能比公认的答案慢,因为它涉及将两个 CGSize 转换为两个 CGRects C 结构。虽然它确实具有读者更快理解的优点。

于 2014-12-03T08:38:08.257 回答
5

这是使用运算符重载的好例子。

按面积比较(即一个CGSize比另一个大):

func <=(left: CGSize, right: CGSize) -> Bool {
    return (left.width * left.height) <= (right.width * right.height)
}

或者,按尺寸进行比较(即一个是否CGSize适合另一个):

func <=(left: CGSize, right: CGSize) -> Bool {
    return (left.width <= right.width) && (left.height <= right.height)
}

显然,您不能在项目中全局包含这两个版本,因此为了安全起见,您可能需要考虑将函数private添加到当前文件中。

于 2019-03-06T10:21:03.333 回答
3
if(firstSize.width <= secondSize.width && firstSize.height <= secondSize.height &&
    firstSize.width*firstSize.height < secondSize.width*secondSize.height)
于 2012-06-19T19:35:10.817 回答
1

Swift 4.0CGSize. 正如 OP 所说,这假设您关心的是尺寸而不是面积。

import UIKit

extension CGSize {
    func isGreaterOrEqual(to size: CGSize) -> Bool {
        return width >= size.width &&
            height >= size.height
    }
}

然后,您可以使用以下值对其进行测试:

let size = CGSize(width: 100, height: 100)
let smaller = CGSize(width: 80, height: 80)
let bigger = CGSize(width: 120, height: 120)

let small = size.isGreaterOrEqual(to: smaller) // true
let big = size.isGreaterOrEqual(to: bigger) // false
let same = size.isGreaterOrEqual(to: size) // true
于 2018-01-20T22:43:21.097 回答
0

乔纳森回答的启发。它应该更安全,因为有时值可以这样667.0000000000001

extension CGSize {
    static func <= (left: CGSize, right: CGSize) -> Bool {
        let delta = 0.001
        return (left.width - right.width) < delta && (left.height - right.height) < delta
    }
}
于 2022-02-17T19:02:10.683 回答