Porównanie dwóch CGRectów

95

Musiałem sprawdzić, czy kadr mojego widoku jest równy danemu CGRect. Próbowałem to zrobić w ten sposób:

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

Jednak otrzymałem komunikat o błędzie Invalid operands to binary expression('CGRect' (aka 'struct CGRect') and 'CGRect'). Dlaczego nie mogę po prostu porównać dwóch CGRect?

Tim Vermeulen
źródło

Odpowiedzi:

250

Użyj tego:

if (CGRectEqualToRect(self.view.frame, rect)) {
     // do some stuff
}
Amelia777
źródło
40

Zobacz dokumentację CGRectEqualToRect ().

bool CGRectEqualToRect ( CGRect rect1, CGRect rect2 );
James Sumners
źródło
6

W Swift 3 byłoby to:

frame1.equalTo(frame2)
Julian Król
źródło
1
w rzeczywistości equalTo(_:)jest teraz przestarzała, więc ==jest preferowana.
olx
2

W Swift działa mi po prostu użycie operatorów ==lub !=:

    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")
    }

konsola debugowania drukuje:

not equal
equal
zumzum
źródło