Comparando dos CGRects

95

Necesitaba comprobar si el marco de mi vista es igual a un CGRect determinado. Intenté hacer eso así:

CGRect rect = CGRectMake(20, 20, 20, 20);
if (self.view.frame == rect)
{
    // do some stuff
}

Sin embargo, recibí un error que decía Invalid operands to binary expression('CGRect' (aka 'struct CGRect') and 'CGRect'). ¿Por qué no puedo simplemente comparar dos CGRects?

Tim Vermeulen
fuente

Respuestas:

250

Utilizar este:

if (CGRectEqualToRect(self.view.frame, rect)) {
     // do some stuff
}
Amelia777
fuente
40

Consulte la documentación de CGRectEqualToRect ().

bool CGRectEqualToRect ( CGRect rect1, CGRect rect2 );
James Sumners
fuente
6

En el Swift 3 sería:

frame1.equalTo(frame2)
Julian Król
fuente
1
de hecho, equalTo(_:)ahora está en desuso, por lo que ==se prefiere.
olx
2

En Swift, simplemente usar los operadores ==o !=funciona para mí:

    let rect = CGRect(x: 0, y: 0, width: 20, height: 20)

    if rect != CGRect(x: 0, y: 0, width: 20, height: 21) {
        print("not equal")
    }

    if rect == CGRect(x: 0, y: 0, width: 20, height: 20) {
        print("equal")
    }

impresiones de la consola de depuración:

not equal
equal
zumzum
fuente