Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Weird behavior of UIView frame after rotation in iPhone

Create a square UIView object testView_, and add this at viewDidLoad:

- (void)viewDidLoad {
[super viewDidLoad];
CGRect initialRect = testView_.frame;
NSLog(@"before rotation: w %f h %f x %f y %f", initialRect.size.width, initialRect.size.height, initialRect.origin.x, initialRect.origin.y);
testView_.transform = CGAffineTransformMakeRotation(0.1);
NSLog(@"after rotation: w %f, h %f, x %f, y %f", testView_.frame.size.width, testView_.frame.size.height, testView_.frame.origin.x, testView_.frame.origin.y);
testView_.frame = initialRect;
NSLog(@"reassign: w %f, h %f, x %f, y %f", testView_.frame.size.width, testView_.frame.size.height, testView_.frame.origin.x, testView_.frame.origin.y);
}

I receive this in the console:

2011-04-27 12:30:32.492 Test[31890:207] before rotation: w 100.000000 h 100.000000 x 20.000000 y 20.000000
2011-04-27 12:30:32.494 Test[31890:207] after rotation: w 109.483757, h 109.483757, x 15.258121, y 15.258121
2011-04-27 12:30:32.495 Test[31890:207] reassign: w 117.873589, h 100.000000, x 11.063205, y 20.000000

I couldn't figure out the logic behind this change in frame value, especially the last one. Can anyone enlighten me? Thanks.

like image 317
Enzo Tran Avatar asked Apr 27 '11 10:04

Enzo Tran


1 Answers

In UIView Class Reference you can see here that you should not set the frame of a view with transform property different than CGAffineTransformIdentity.

If you want to change the position of the transformed view, you should use center property. If you want to adjust the size you should use bounds property.

like image 62
losic Avatar answered Oct 18 '22 17:10

losic