Я был удивлен не найти ответ на этот вопрос, возможно, что-то очень простое, которое я так или иначе пропускаю:
Как получить реальный размер 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
[myView frame]
возвращает кадр представления, видимый родителем, для макета и относительных размеров. [myView bounds]
возвращает границы представления, видимые им самим, для рисования. Если у вас есть преобразования, примененные к нескольким представлениям, вы можете использовать convertRect:
в или из представления.
Редактировать:
Может быть, что-то вроде этого.
CGRect rect = [view bounds];
CGPathRef path = CGPathCreateMutable();
rect.origin = CGPointZero;
CGPathAddRect( rect , [view transform] );
rect = CGPathGetBoundingBox( path );
CGPathRelease( path );
Использование [центр просмотра]
, чтобы найти позицию в супервизоре.
Используйте CGSizeApplyAffineTransform (размер, преобразование)
, и он вернет преобразованный размер. Также существуют аналогичные функции CGPoint
и CGRect
.