Получите размер UIView после применения CGAffineTransform

Я был удивлен не найти ответ на этот вопрос, возможно, что-то очень простое, которое я так или иначе пропускаю:

Как получить реальный размер UIView после того, как я применяю CGAffineTransform к нему?

например.

мой UIView имеет размер 300 x 200, я применяю преобразование масштабирования скажем, фактор 2 и горизонтальный и вертикальный, таким образом, UIView теперь берет 600 x 400 на экране, но это - границы, и это - границы слоя, все еще возвращают размер 300 x 200..., где я нахожу реальный размер UIView?

PS забыл упоминать, что я хочу также повернуть uiview. Если я подаю заявку, только масштабирующийся CGSizeApplyAffineTransform работает отлично, но когда существует также вращение, то он не работает правильно.

Править: drawnonward указал на меня в правильном направлении, я просто совершенствовал немного код для компиляции, и здесь это:

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

Теперь rect.size содержит размеры представления с преобразованием, примененным Еще раз спасибо к drawnonward

19
задан Marin Todorov 23 April 2010 в 08:19
поделиться

2 ответа

[myView frame] возвращает кадр представления, видимый родителем, для макета и относительных размеров. [myView bounds] возвращает границы представления, видимые им самим, для рисования. Если у вас есть преобразования, примененные к нескольким представлениям, вы можете использовать convertRect: в или из представления.

Редактировать:

Может быть, что-то вроде этого.

CGRect rect = [view bounds];
CGPathRef path = CGPathCreateMutable();
rect.origin = CGPointZero;
CGPathAddRect( rect , [view transform] );
rect = CGPathGetBoundingBox( path );
CGPathRelease( path );

Использование [центр просмотра] , чтобы найти позицию в супервизоре.

12
ответ дан 30 November 2019 в 02:20
поделиться

Используйте CGSizeApplyAffineTransform (размер, преобразование) , и он вернет преобразованный размер. Также существуют аналогичные функции CGPoint и CGRect .

2
ответ дан 30 November 2019 в 02:20
поделиться