17

创建一个方形 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

我无法弄清楚帧值变化背后的逻辑,尤其是最后一个。任何人都可以启发我吗?谢谢。

4

1 回答 1

36

在 UIView Class Reference 中,您可以在此处看到,您不应使用与CGAffineTransformIdentity不同的变换属性设置视图的框架。

如果你想改变变换后视图的位置,你应该使用center属性。如果要调整大小,则应使用bounds属性。

于 2011-05-03T11:15:12.943 回答