应用CGAffineTransform后获取UIView的大小

Mar*_*rov 19 objective-c uiview cgaffinetransform

我很惊讶没有找到这个问题的答案,也许是一些非常简单的我忽略了:

在我应用CGAffineTransform之后如何获得UIView的实际大小?

例如.

我的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 );
Run Code Online (Sandbox Code Playgroud)

现在,rect.size包含应用了转换的视图的尺寸再次感谢drawonward

小智 39

我在Objective C中使用它:

CGRect transformedBounds = CGRectApplyAffineTransform(view.bounds, view.transform);
Run Code Online (Sandbox Code Playgroud)

或者在Swift 4中:

let transformedBounds = view.bounds.applying(view.transform)
Run Code Online (Sandbox Code Playgroud)


dra*_*ard 12

[myView frame]返回父级看到的视图框架,用于布局和相对大小. [myView bounds]返回视图的边界,如图所示,用于绘制.如果您将变换应用于多个视图,则可以convertRect:在视图中使用或从视图中使用.

编辑:

也许这样的事情.

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

用于[view center]在superview中查找位置.