iOS:UIView& CALayer - 2D与3D变换

时间:2010-08-30 16:25:51

标签: uiview 3d 2d transform calayer

在我之前的代码中,我在视图的drawRect中更改了坐标系,因此矩形在中心位置为0,0,顶部中心位于0,1,右边缘位于中心位置为1,0。即标准化的笛卡尔系统。

    {
    // SCALE so that we range from TL(0, 0) - BR(2, -2)
    CGContextScaleCTM (X, 0.5 * bitmapSize.width, -0.5 * bitmapSize.height);

    // TRANSLATE so that we range from TL(-1, 1) - BR(1, -1)
    //   ie: a cartesian coordinate system, centred on (0, 0) with: 
    //       x increasing to the right
    //       y increasing upwards
    //       x&y each ranging from -1 to 1
    CGContextTranslateCTM(X, 1, -1);

    T = CGContextGetCTM (X);
}

在这个框中我创建了一个带有12个自定义绘制按钮的轮子。按下按钮后按钮会逐渐褪色。

现在我正在重新设计代码,因为动画渲染太慢了

在我的视图的Load事件中,我创建了一个wheel对象,它将轮子绘制到自己的CALayer上。然后将其作为子图层添加到视图的图层中。

(轮对象将依次创建按钮,每个按钮将绘制到自己的CALayer上,这些图层将作为子图层添加到轮子图层中)

无论如何,我非常希望使用我的标准化笛卡尔系统来绘制轮子和按钮。但我不太清楚如何实现它。

我可以改变视图转换。但这会改变视图的边界矩形。一种解决方案是在视图中有一个视图,但我偶然发现测试剪切到圆形路径并在该路径内绘制将比没有剪辑的绘制慢得多。所以我对此犹豫不决。我正在寻找最佳效率(没有去GL,只是 - 我还没准备好 - 我想先了解这些东西,我想)

或者我可以改变图层的变换。但这是一个3D变换!我很难理解这个逻辑。 iPhone是一个2D屏幕。在它上面表示2D界面。视图和图层我将其概念化为平面矩形,彼此叠加。这是错的吗?这个3D商务只是做时髦的翻转效果吗?

如果图层已设置为栅格化,并且它有一个奇怪的变换怎么办?如果它不知道它运行的是什么像素分辨率,它怎么可以栅格化呢?如果我们有10个嵌套层,每个层都有一个时髦的变换怎么办?最内层的需要光栅化吗?它是否以某种方式一直沿着链条找出叠加的像素?如果基础图层位于视图中视图内的视图中并且这些视图对它们进行了2D变换,该怎么办?在它到达像素之前它是否真的一直存在?

我想光栅化我的按钮 - 这就是我要问的原因。它们是非常复杂的绘图对象。如果它们被预渲染为死和活,它将节省大量的CPU GPU,并且衰落将仅仅包括合成x * dead plus(1-x)* alive。所以我真的想要两者的位图。

有人可以杀死我的困惑吗?

非常感谢,

Ohmu

0 个答案:

没有答案