Ios CATTransform3D/CGAffineTransform是否向现有动画转换添加透视图?

Ios CATTransform3D/CGAffineTransform是否向现有动画转换添加透视图?,ios,animation,matrix,cgaffinetransform,catransform3d,Ios,Animation,Matrix,Cgaffinetransform,Catransform3d,我通过CGAffineTransform创建了一个动画。我使用了animateWithDuration:并在其中设置了transform。但是我忘记了所有的视图都应该从一个定义的角度进行翻译。我想实现类似的透视变换: 正如我所想: 它是三维空间 所有矩形都有一条属于一个不可见表面的边 所有的矩形都有相等的角度(因此所有的矩形都是平行的) 人的视线集中在中心,所以对人来说,所有的矩形都有不同的角度(但这只是因为透视效果) 据我所知,CGAffineTransform和CATTransform

我通过
CGAffineTransform
创建了一个动画。我使用了
animateWithDuration:
并在其中设置了transform。但是我忘记了所有的视图都应该从一个定义的角度进行翻译。我想实现类似的透视变换:

正如我所想:

  • 它是三维空间

  • 所有矩形都有一条属于一个不可见表面的边

  • 所有的矩形都有相等的角度(因此所有的矩形都是平行的)

  • 人的视线集中在中心,所以对人来说,所有的矩形都有不同的角度(但这只是因为透视效果)

据我所知,
CGAffineTransform
CATTransform3D
在它们之间是可转换的,因此对我来说它们之间没有区别

问题是:

1) 我知道如何表示旋转、缩放、平移等,但如何实现围绕锚点的透视图?我应该执行哪些操作和顺序


2) 即使我能找到正确的动作序列,那么如何将它们应用到现有的动画CGAffineTransform?据我所知,一半的变换应该是静态的,另一半应该是动画的。如何合并它们?

问题1

我写过代码,但没有透视图

我拒绝透视的原因是它太慢了

在iPad中,你无法通过删除不可见的页面来优化应用程序,因为它们可能都是可见的(或者离边缘太近而无法释放)。所以你只能缩小它们的尺寸。这很奇怪,但是如果你想实现iphone版本,那么你不能优化大小,但是可以优化不可见的页面

在iPad中,你需要太多的计算,因此也需要重新绘制通话。此外,您可以在后台存储
UIWebView
对象,这会消耗大量内存(我在网站上查看了
UIWebView
s的许多实例,它只是一个“硬”且复杂的网站)。甚至在苹果发出内存警告之前,一切都变慢了

问题2

警告
CGAffineTransform
CATTransform3D
仅在有时它们之间是可转换的。至少不是每个
CATTransform3D
都可以转换为
CGAffineTransform
,例如,如果它像我的例子那样包含透视图

在我的例子中,我需要
CATTransform3D
CGRect
,因为即使应用第一个视图,也只会缩放整个视图,但如果应用第二个视图,则会减小视图的边界,但其子视图不会按比例缩放,并且某些属性(例如字体大小)完全不缩放,您需要手动缩放它们。最后,我使用了以下组合: 1) 边界为全屏,中心位于屏幕中心; 2) 与1相同,但已应用变换以缩放并移动到适当的位置;
3) 与2相同,但我从
transform
属性中删除了缩放,并通过更小的边界再次添加,并在必要时减小了大小、字体等。这种状态只是为了减少内存消耗。

你有没有弄明白这一点?我遇到了非常相似的事情。