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)