如何比较两个CGSize变量?

Dvi*_*evy 32 cocoa-touch core-graphics objective-c

我想确保a CGSize小于或等于另一个CGSize.喜欢:

CGSize firstSize = CGSizeMake(1.0,1.0);
CGSize secondSize = CGSizeMake(5.0,3.0);
if(firstSize <= secondSize){
    Do Stuff . . .
}
Run Code Online (Sandbox Code Playgroud)

我该如何比较呢?

小智 111

要检查您可以使用的相等性,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
}
Run Code Online (Sandbox Code Playgroud)

  • Dvir Levy正在寻找问题中描述的"小于或等于".如果`CGSizeEqualToSize()`返回false,我们仍然不知道它是更大还是更小. (9认同)

Ann*_*nne 18

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

if(firstSize.width <= secondSize.width && firstSize.height <= secondSize.height)
Run Code Online (Sandbox Code Playgroud)


ric*_*ins 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)
    );
}
Run Code Online (Sandbox Code Playgroud)

您可以使用名称具有描述性的内置内联辅助函数,而不是使用难以阅读的条件语句自行编写完整逻辑.

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


Jon*_*lis 5

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

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

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

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

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

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