2012-06-19 107 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