Get size of UIView after applying CGAffineTransform Get size of UIView after applying CGAffineTransform objective-c objective-c

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.