我在我的代码中旋转了一些视图,似乎有些视图得到了奇怪的分数,例如,10.0变为10.000000000000002。
您可以使用此代码段自行查看:
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 10.0, 10.0)];
for (NSUInteger i = 0; i < 100; i++) {
view.transform = CGAffineTransformRotate(view.transform, ((90.0) / 180.0 * M_PI));
NSLog(@"%@", NSStringFromCGRect(view.frame));
}
非常感谢任何帮助!
答案 0 :(得分:1)
如果浮点不准确导致问题,精确90度的一种可能的解决方法是手动指定矩阵:
// rotate by 90˚
view.transform = CGTransformConcat(view.transform,
CGAffineTransformMake(0, 1, -1, 0, 0, 0));
这些幻数来自旋转矩阵的等式:
⎛ cos α sin α 0 ⎞
⎜-sin α cos α 0 ⎟
⎝ 0 0 1 ⎠
然后左边的6个参数成为CGAffineTransformMake的参数
当α
=90˚时,我们得到(0,1,-1,0,0,0)
答案 1 :(得分:0)
如果您要标准化这些值,可以使用CGRectIntegral。来自the docs(这可能会更改矩形)
一个矩形,其原点和大小的整数值最小 包含源矩形。也就是说,给定一个矩形 分数原点或大小值,CGRectIntegral舍入 矩形的原点向下,其大小向上到最近的整体 整数,结果包含原始矩形。
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 10.0, 10.0)];
for (NSUInteger i = 0; i < 100; i++) {
view.transform = CGAffineTransformRotate(view.transform, M_PI_2);
NSLog(@"%@", NSStringFromCGRect(CGRectIntegral(view.frame)));
}