1

对于给定的变换计算,

CGAffineTransform preferredTransform = CGAffineTransformMake(-1, 0, 0, -1, 1920, 1080);
CGAffineTransform transform1 = CGAffineTransformConcat(CGAffineTransformMakeTranslation(-preferredTransform.tx, -preferredTransform.ty), CGAffineTransformMakeRotation(M_PI));
NSLog(@"%@", NSStringFromCGAffineTransform(transform1));

输出将是[-1, 1.2246467991473532e-16, -1.2246467991473532e-16, -1, 1920.0000000000002, 1079.9999999999998]但我希望它是[-1, 0, 0, -1, 1920, 1080]

为什么会出现舍入错误?我应该以不同的方式应用转换以产生四舍五入的结果吗?

4

2 回答 2

0

在 32 位 iPad 上舍入是正确的,但是在 64 位 iPad 上会发生舍入错误。由于 M_PI 的旋转与 -1 的缩放相同,因此可以通过将其更改为:

CGAffineTransform preferredTransform = CGAffineTransformMake(-1, 0, 0, -1, 1920, 1080);
CGAffineTransform transform1 = CGAffineTransformConcat(CGAffineTransformMakeTranslation(-preferredTransform.tx, -preferredTransform.ty), **CGAffineTransformMakeScale(-1, -1)**);

NSLog(@"%@", NSStringFromCGAffineTransform(transform1));
于 2014-04-02T15:21:43.553 回答
0

指定的舍入误差是由于 64 位架构造成的。如果你在 32 位模拟器上启动,你不应该看到那些舍入错误。

于 2014-05-02T12:33:13.907 回答