OpenGL视图上的CGAffineTransform及其对视图大小的影响

时间:2016-05-27 12:02:34

标签: ios objective-c core-graphics cgaffinetransform

我正在调试一个问题,我正在使用的库创建一个OpenGL视图,并触发内存警告。

我注意到的一件事是将视图设置为窗口大小的一小部分会使其正常工作。通过XCodes接口调试器通过视图进行调试时,我看到视图的边界远远超出了父视图的边界。打印有问题的视图时,我会看到:

<RenderView: 0x140a61d10; frame = (5 0; 1019 728); transform = [1019, 0, 0, 728, 0, 0]; layer = <CALayer: 0x140ad0a40>>

我对此并不熟悉,但是从阅读CGAffineTransform docs看来,设置的变量似乎是“a”和“d”,它们对应于比例sx和sy。

所以我的问题是这个转换实际上会显示一个1019 * 1019 x 728 * 728的视图,这看起来有多可疑吗?可能是图书馆中的一个错误,还是我的理解不正确?

我在多个设备上使用Xcode 7看到了这个问题,目前正在运行9.3.1的iPad Pro 9.7上进行测试。

1 个答案:

答案 0 :(得分:0)

以下是关于2x3 CGAffineTransform与GLKMatrix4之间的区别的说明......

表示视图或资产维度和方向(或方面)的首选或实际转换的CGAffineTransform转换为GLKMatrix4(或mat4,它与顶点着色器中的位置相乘),因此:

CGAffineTransform preferredTransform= [videoTrack preferredTransform];

GLfloat preferredTransformMatrix[] = {
preferredTransform.a, preferredTransform.b, preferredTransform.tx, 0.0,
preferredTransform.c, preferredTransform.d, preferredTransform.ty, 0.0,
0.0,                  0.0,                  1.0,                   0.0,
0.0,                  0.0,                  0.0,                   1.0
};

这只是一个示例,显示4x4矩阵的2x3矩阵中每个值的正确位置。