Byłem zaskoczony, aby nie znaleźć odpowiedź na to pytanie, być może jest to coś bardzo prosty jakoś przeoczyć:Get rozmiaru UIView po zastosowaniu CGAffineTransform
Jak uzyskać prawdziwe rozmiaru UIView po tym, jak zastosować CGAffineTransform do to?
np.
moje UIView ma rozmiar 300 x 200, stosuję przeliczanie skalowania, powiedzmy, czynnik 2, zarówno poziomy, jak i pionowy, więc UIView teraz zajmuje 600 x 400 na ekranie, ale to granice i jego granice wciąż powracają do rozmiaru 300 x 200 ... gdzie mogę znaleźć rzeczywisty rozmiar UIView?
ps. zapomniałem wspomnieć, że chcę również obrócić uiview. Jeśli zastosuję tylko skalowanie, CGSizeApplyAffineTransform działa świetnie, ale gdy jest również obrót, to nie działa poprawnie.
Edit: drawnonward wskazał mnie we właściwym kierunku, po prostu dopracowane nieco kod do kompilowania i tutaj jest:
UIView* view = (your view being transformed);
CGAffineTransform trans = (view.transform or create a new transformation);
CGRect rect = [view bounds];
CGMutablePathRef path = CGPathCreateMutable();
rect.origin = CGPointZero;
CGPathAddRect(path , &trans , rect);
rect = CGPathGetBoundingBox(path);
CGPathRelease(path);
Teraz rect.size zawiera wymiary widoku z transformacji zastosowano Jeszcze raz dziękuję za ciągnienie
Oto dokumentacja dotycząca "ramki" z dokumentacji Apple: Ostrzeżenie: Jeśli właściwość transform nie jest przekształceniem tożsamości, wartość tej właściwości jest niezdefiniowana i dlatego być zignorowanym. Tak więc ramka nie wchodzi w grę, gdy stosuje się transformację. I "granice" zwraca zawsze pierwotny rozmiar –
Rzeczywiście! Argh, ta biblioteka funkcji, o której zawsze zapominam - CGPathGetBoundingBox to była sztuczka. Edytowałem to pytanie za pomocą działającego kodu, bardzo dziękuję człowiekowi –
Należy również zauważyć, że właściwość centrum ma działać, nawet z przekształceniami bez tożsamości. – Olie