Странное поведение кадра UIView после поворота в iPhone - PullRequest
17 голосов
/ 27 апреля 2011

Создайте квадратный объект 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

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

1 Ответ

36 голосов
/ 03 мая 2011

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

Если вы хотитеЧтобы изменить положение преобразованного вида, следует использовать свойство center .Если вы хотите изменить размер, вы должны использовать свойство bounds .

...