CGAffineTransformMake 和 CGAffineTransformMakeRotation 之间的主要区别是什么?

What is the major difference between CGAffineTransformMake and CGAffineTransformMakeRotation?

有什么区别:

self.viewBG.transform = CGAffineTransformMake(1, 0, 0, -1, 0, 0);

self.viewBG.transform = CGAffineTransformMakeRotation(-M_PI);

我在我的聊天应用程序中使用 table 视图,我用上述方法转换 table 所以请帮我解决这个问题。

哪个更好,为什么?

谢谢!

CGAffineTransformMake 允许您直接设置变换的各个矩阵值,而 CGAffineTransformMakeRotation 将这项工作从您身上拿走,并允许您请求一个变换,将某些东西旋转一定量想要,而无需了解矩阵的工作原理。最终结果是一样的。

第二个选项要好得多 - 很明显变换在做什么以及变换了多少。任何不了解变换的矩阵数学如何工作或那些未命名参数的含义的读者(几乎所有读者,包括我自己在内)都不会知道第一行在做什么。

可读性总是获胜。

CGAffineTransformMake 可以让您自己设置转换,而其他的基本上都是为您设置的便捷方法。

例如,CGAffineTransformMakeRotation 的计算结果为:

t' = [ cos(angle) sin(angle) -sin(angle) cos(angle) 0 0 ]

注意结果不一样。使用 CGAffineTransformMakeRotation 将导致 ( 舍入值 ) [-1, 0, 0, -1, 0, 0 ]。还有一个准确性方面。三角函数并不总是计算出您期望的精确值。在这种情况下,sin(-M_PI) 实际变为 -0.00000000000000012246467991473532 而不是零,因为 PI 不准确,我想。

就个人而言,我总是使用方便的方法,因为代码更容易理解。无论如何,这种不准确通常是您不会注意到的。

CGAffineTransformMake : Returns 根据您提供的值构建的仿射变换矩阵。

CGAffineTransformMakeRotation : Returns 根据您提供的旋转值构建的仿射变换矩阵。

来源URL:http://mirror.informatimago.com/next/developer.apple.com/documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/function_group_1.html