2012-06-19 196 views
27

我想确保CGSize小于或等于另一个CGSize。如:如何比较两个CGSize变量?

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

我该如何比较?

+6

这取决于你如何定义“小”。既然你有两个维度,他们都必须变小吗?或只是高度?只是宽度?或者也许是定义矩形的区域? – lnafziger

+0

越小,至少1维越小,而第二维不大(可以相等)。 –

+0

好,所以总面积并不重要?如果你有一个盒子是100x100,另一个盒子是101x25,那么你的定义是更大的? – lnafziger

回答

18

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

if(firstSize.width <= secondSize.width && firstSize.height <= secondSize.height) 
+0

实际上,如果它们的尺寸相同,这将是真实的。他希望至少在一个维度上“更小”。 – lnafziger

+1

@Inafziger:“更小*或等于*” –

+0

@KevinBallard阅读他的第一条评论:“至少一个维度更小....” – lnafziger

3
if(firstSize.width <= secondSize.width && firstSize.height <= secondSize.height && 
    firstSize.width*firstSize.height < secondSize.width*secondSize.height) 
102

要检查平等,你可以使用,CGSizeEqualToSize功能由Apple

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 
} 
+9

Dvir Levy如问题所述寻找“小于或等于”。如果'CGSizeEqualToSize()'返回false,我们仍然不知道它是大还是小。 – Anne

4

下面的函数确定是否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结构体。尽管它具有读者快速理解的优点。

0

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