Uiview iOS:UIVew&;CALayer-二维与三维变换

Uiview iOS:UIVew&;CALayer-二维与三维变换,uiview,3d,2d,transform,calayer,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,

在我以前的代码中,我更改了视图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事件中,我创建了一个轮子对象,它将轮子绘制到自己的CALayer上。然后将其作为子层添加到视图的层中

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

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

我可以更改视图转换。但这会更改视图的边界矩形。一种解决方案是在视图中有一个视图,但我通过测试偶然发现,剪切到圆形路径并在该路径中绘制将比不使用该剪辑的绘制慢很多。因此,我对这样做犹豫不决。我在寻找最佳效率(不去德国劳埃德船级社,我还没准备好——我想我需要先了解这些东西)

或者,我可以更改层的变换。但这是一个3D变换!我很难理解其中的逻辑。IPhone是一个2D屏幕。其上表示为二维界面。我将视图和层概念化为一个接一个的平面矩形。这是错的吗?这部3D电影仅仅是为了制作时髦的翻转效果吗

如果图层被设置为光栅化,并且有一个奇怪的变换,该怎么办?如果不知道正在运行的像素分辨率,它如何光栅化?如果我们有10个嵌套层,每个层都有一个时髦的变换呢?最里面的那个需要光栅化吗?它是否以某种方式沿着链一直走下去,并找出要覆盖的像素?如果基础层位于视图中的视图中,并且这些视图上有二维变换,该怎么办?它真的一直到像素吗

我想把我的钮扣光栅化——这就是我为什么要问的原因。它们是非常复杂的图形对象。如果它们被预先渲染为死的和活的,这将节省大量CPU GPU,而淡入淡出将只包括合成x*死的加上(1-x)*活的。所以我真的想要这两个的位图

有人能消除我的困惑吗

非常感谢,

奥姆