Подтвердить что ты не робот

Странное поведение кадра UIView после ротации в iPhone

Создайте квадратный объект UIView testView_ и добавьте его в 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);
}

Я получаю это в консоли:

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

Я не мог понять логику этого изменения в значении кадра, особенно в последнем. Может ли кто-нибудь просветить меня? Спасибо.

4b9b3361

Ответ 1

В Справочнике классов UIView вы можете видеть здесь, что вы не должны устанавливать фрейм представления с свойством преобразования, отличным от CGAffineTransformIdentity.

Если вы хотите изменить положение трансформированного представления, вы должны использовать свойство центр. Если вы хотите настроить размер, вы должны использовать свойство bounds.