Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IOS view transformation modifies frame?

I have a view in which I am doing some specific drawings in drawRect. These drawings are dynamic and are based on the view's width and height. Then, the view which contains it applies a rotation transformation to it. However this transformation seems to adjust the values for my view's frame which impacts my drawing in drawRect.

NSLog(@"before:%f,%f,%f,%f",button.frame.origin.x,button.frame.origin.y,button.frame.size.width,button.frame.size.height);

    CGAffineTransform currentTransform = button.transform;
    CGAffineTransform transformRotate = CGAffineTransformMakeRotation(degreesToRadians);
    button.transform = transformRotate;

    NSLog(@"after:%f,%f,%f,%f",button.frame.origin.x,button.frame.origin.y,button.frame.size.width,button.frame.size.height);

Here is the output:

before:50.000000,100.000000,150.000000,50.000000 after:65.849365,47.548096,118.301262,154.903809

Is this correct behaviour or am I applying the transformation incorrectly?

like image 788
KTas Avatar asked May 23 '12 01:05

KTas


1 Answers

See the reference documentation on UIView's frame property;


frame

The frame rectangle, which describes the view’s location and size in its superview’s coordinate system.

@property(nonatomic) CGRect frame

Warning

If the transform property is not the identity transform, the value of this property is undefined and therefore should be ignored.


Despite that warning, things work as intended. Once a transformation (other that identity) is applied, the frame usually results into the projection rectangle of the original view. But then again, you should not ignore that warning if you really want to find out about the frame with the applied transformation and use CGRectApplyAffineTransform for properly getting it.

like image 122
Till Avatar answered Oct 26 '22 22:10

Till