2012-06-19 16 views
27

CGSizeCGSizeより小さいか等しいことを確認します。 like:2つのCGSize変数を比較するには?

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

これをどのように比較すればよいですか?

+6

それはあなたが「小さい」をどう定義するかに依存します。あなたは2つの次元を持っているので、どちらも小さくなければなりませんか?それとも高さだけ?ちょうど幅ですか?または、定義された四角形の領域ですか? – lnafziger

+0

小さい方は少なくとも1次元は小さく、2次元目は大きくない(等しくてもよい)。 –

+0

さて、総面積は関係ありませんか? 1つのボックスが100x100でもう1つのボックスが101x25の場合は、定義によって大きくなります。 – lnafziger

答えて

18

firstSizeが回転せずにsecondSizeに適合するかどうかを確認します。

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

実際、同じサイズであればこれは真です。彼は少なくとも1つの次元で「より小さい」ことを望んでいる。 – lnafziger

+1

@Inafziger: "小さい*または等しい*" –

+0

@KevinBallardは彼の最初のコメントを読んで: "少なくとも1つの次元は小さい...." – lnafziger

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

Appleことで、あなたが使用することができ平等のためCGSizeEqualToSize機能を確認するには。最初のパラメータでCGSizeの矩形内または第二パラメータにCGSizeの矩形の範囲に完全に収まる場合

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質問に記載されているように「小さいか等しい」を探している。 'CGSizeEqualToSize()'がfalseを返す場合、我々はまだそれが大きいか小さいか分からない。 – Anne

4

次の関数が決定します。

- (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) 
    ); 
} 

代わりの条件文を読むことは困難との完全なロジックを自分で書いて、あなたは、名前、記述されている組み込みの、インラインヘルパー関数を使用することができます。

私は研究をしていませんが、2つのCGSizeを2つのCGRects C構造体に変換するので、この方法はおそらく受け入れられた答えより実行が遅くなります。それは読者が理解するのが早いという利点がありますが。

0

Swift 4.0 on CGSizeのかなりまっすぐな前方拡張。 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