Get size of UIView after applying CGAffineTransform
I use this in Objective C:
CGRect transformedBounds = CGRectApplyAffineTransform(view.bounds, view.transform);
or in Swift 4:
let transformedBounds = view.bounds.applying(view.transform)
[myView frame]
returns the frame of the view as seen by the parent, for layout and relative sizes. [myView bounds]
returns the bounds of the view as seen by itself, for drawing. If you have transforms applied to multiple views, you can use convertRect:
to or from a view.
Edit:
Maybe something like this.
CGRect rect = [view bounds];CGPathRef path = CGPathCreateMutable();rect.origin = CGPointZero;CGPathAddRect( rect , [view transform] );rect = CGPathGetBoundingBox( path );CGPathRelease( path );
The use [view center]
to find the position in the superview.
Old question, but bumped into here, after searching a solution and tons of attempts. It was simple;
view.layer.frame
has all transformations applied and you'll get the size from view.layer.frame.size
easily.
-- below here is not an answer to this question - -
And for my problem, I was trying to calculate new center
value after changing layer.anchorPoint
of my rotated view, so it doesn't move. And finally did it like this;
CGPoint topLeft = [self.superview convertPoint:CGPointMake(0, 0) fromView:self];self.layer.anchorPoint = CGPointMake(0, 0);self.center = topLeft;
for reverse
CGPoint center = [self.superview convertPoint:CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2) fromView:self];self.layer.anchorPoint = CGPointMake(.5, .5);self.center = center;
finally.