2012-06-19 6 views
27

Ich möchte sicherstellen, dass ein CGSize ist kleiner oder gleich einem anderen CGSize. wie:Wie zwei CGSize-Variablen zu vergleichen?

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

Wie würde ich das vergleichen?

+6

Es hängt davon ab, wie definieren Sie „klein“. Da Sie zwei Dimensionen haben, müssen beide kleiner sein? Oder nur die Höhe? Nur die Breite? Oder vielleicht der Bereich des definierten Rechtecks? – lnafziger

+0

kleiner ist mindestens 1 Dimension ist kleiner, während die zweite Dimension nicht größer ist (könnte gleich sein). –

+0

Okay, also ist die Gesamtfläche egal? Wenn Sie eine Box haben, die 100x100 ist und eine andere Box, die 101x25 ist, dann ist es Ihrer Definition nach größer? – lnafziger

Antwort

18

fest, ob firstSize in secondSize passt ohne sich zu drehen:

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

Tatsächlich wird dies wahr sein, wenn sie die gleiche Größe haben. Er will "kleiner" in mindestens einer Dimension. – lnafziger

+1

@Inafziger: "kleiner * oder gleich *" –

+0

@KevinBallard lesen seinen ersten Kommentar: "mindestens eine Dimension ist kleiner ...." – lnafziger

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

Gleichheit zu überprüfen für Sie, CGSizeEqualToSize Funktion von Apple verwenden können.

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 sucht nach "kleiner oder gleich" wie in der Frage beschrieben. Falls 'CGSizeEqualToSize()' 'false zurückgibt, wissen wir immer noch nicht, ob es größer oder kleiner ist. – Anne

4

Die folgende Funktion bestimmt, ob das Rechteck des CGSize im ersten Parameter paßt ganz innerhalb oder am Umfang des Rechtecks ​​des CGSize in dem zweiten Parameter.

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

der volle Logik, sich mit schwer zu schreiben bedingten Anweisungen zu lesen, können Sie die eingebaute, Inline-Helferfunktionen, deren Namen sind beschreibende verwenden.

Während ich die Forschung nicht getan habe, ist diese Methode wahrscheinlich langsamer in der Ausführung als die akzeptierte Antwort, da es die Konvertierung der zwei CGSizes in zwei CGRects C-Strukturen beinhaltet. Obwohl es den Vorteil hat, dass es vom Leser schneller verstanden wird.

0

Eine ziemlich direkte Erweiterung für Swift 4.0 auf CGSize. Wie OP angibt, wird davon ausgegangen, dass Sie sich mit Dimensionen und nicht mit Bereichen befassen.

import UIKit 

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

Sie können dann testen Sie es mit den folgenden Werten:

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