CGAffineTransform Translation和Rotation产生不变的转换结果

时间:2014-03-26 23:25:10

标签: avfoundation cgaffinetransform affinetransform cgaffinetransformscale

对于给定的变换计算,

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]

为什么舍入错误? 我应该以不同方式应用转换以产生圆形结果吗?

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

指定的舍入错误是由64位架构引起的。如果在32位模拟器上启动,则不应该看到这些舍入错误。