【问题标题】:CATransform3d/CGAffineTransform add perspective to existing animated transform?CATransform3d/CGAffineTransform 向现有动画变换添加透视?
【发布时间】:2015-04-03 15:23:37
【问题描述】:

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

http://cdn.iphonehacks.com/wp-content/uploads/2014/08/ios-8-safari-tab-view.jpg

我认为:

  • 是3D空间;

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

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

  • 人类的视线集中在中心,因此对于人类来说,所有矩形都具有不同的角度(但这只是由于透视效果而发生的)。

据我了解,CGAffineTransformCATransform3D 可以相互转换,所以对我来说它们之间没有区别。

问题:

1)我知道如何表示旋转、缩放、平移等。但是如何实现围绕锚点的透视?我应该执行哪些操作以及按什么顺序执行?

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

【问题讨论】:

  • 你有没有想过这个问题?我遇到了非常相似的事情。

标签: ios animation matrix cgaffinetransform catransform3d


【解决方案1】:

问题 1

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

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

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

在 iPad 中,您需要进行太多计算,因此也需要重绘调用。此外,您可以在后台存储UIWebView 对象,这会消耗大量内存(我检查了UIWebViews 与网站onliner.by 的许多实例 - 它只是“硬”和复杂的网站)。甚至在苹果产生内存警告之前,一切都变得很慢。

问题 2

警告! CGAffineTransformCATransform3D 有时只能在它们之间转换。至少不是每个CATransform3D 都可以转换为CGAffineTransform,例如,如果它包含像我这样的透视图。

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

【讨论】:

    猜你喜欢
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多