unavailable cgrectgetwidth cgpointmake objective-c cocoa-touch core-graphics

objective c - cgrectgetwidth - ¿Cómo comparar dos variables CGSize?



cgrectgetwidth swift 4 (5)

Quiero asegurarme de que un CGSize sea ​​más pequeño o igual que otro CGSize . me gusta:

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

¿Cómo compararía esto?


Determine si firstSize encaja en secondSize sin rotar:

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


La siguiente función determina si el rectángulo del CGSize en el primer parámetro se ajusta totalmente dentro o en la extensión del rectángulo del CGSize en el segundo parámetro.

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

En lugar de escribir la lógica completa usted mismo con instrucciones condicionales difíciles de leer, puede usar las funciones integradas de ayuda en línea cuyos nombres son descriptivos.

Si bien no he realizado la investigación, este método es probablemente más lento en la ejecución que la respuesta aceptada, ya que implica convertir los dos CGSizes en dos CGRects C structs. Aunque tiene la ventaja de ser más rápido de comprender por el lector.


Para verificar la igualdad que puede utilizar, la función CGSizeEqualToSize de 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 }


Una extensión bastante sencilla para Swift 4.0 en CGSize . Como afirma OP, esto supone que está preocupado por las dimensiones y no por el área.

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

A continuación, puede probarlo con los siguientes valores:

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


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