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中查找位置.