为了账号安全,请及时绑定邮箱和手机立即绑定

如何将透视转换应用于UIView?

如何将透视转换应用于UIView?

蛊毒传说 2019-06-20 16:15:55
如何将透视转换应用于UIView?我希望在UIView上执行透视图转换(如在Coverflow中看到)有没有人知道这是可能的?我调查过CALayer并且已经浏览了所有实用的程序员核心动画播客,但是我仍然不清楚如何在iPhone上创建这样的转换。任何帮助,指针或示例代码片段都将是非常感谢的!
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

正如Ben所说,您需要使用UIView的层,使用CATransform3D来执行层的旋转。让视角发挥作用的诀窍,如在此描述,直接访问CATransform3D(M34)的一个矩阵单元。矩阵数学从来都不是我的专长,所以我无法确切地解释为什么会这样做,但它确实如此。您需要将这个值设置为初始转换的负分数,然后将层旋转转换应用到该值。您还应该能够执行以下操作:

UIView *myView = [[self subviews] objectAtIndex:0];CALayer *layer = myView.layer;CATransform3D rotationAndPerspectiveTransform =
 CATransform3DIdentity;rotationAndPerspectiveTransform.m34 = 1.0 / -500;rotationAndPerspectiveTransform = CATransform3DRotate(rotationA
 ndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);layer.transform = rotationAndPerspectiveTransform;

为每次旋转从零开始重建图层转换。

可以找到这方面的完整示例(使用代码)。这里,我在几个CALYER上实现了基于触摸的旋转和缩放,基于BillDudney的一个例子。程序的最新版本,在页面的最底层,实现了这种透视图操作。代码应该是相当简单的阅读。

响应中引用的子层转换是应用于UIView的子层的转换CALayer..如果你没有亚层,就不用担心。我在我的例子中使用子层转换,原因很简单,因为在我正在旋转的一个层中包含了两个CALYER。


查看完整回答
反对 回复 2019-06-20
?
POPMUISE

TA贡献1765条经验 获得超5个赞

为了补充布拉德的答案,并提供一个具体的例子,我借用我自己的答案在另一篇关于类似主题的文章中。在我的回答中,我创建了一个简单的斯威夫特游乐场,你可以下载并播放,其中我演示了如何使用简单的层次结构创建UIView的透视图效果,并展示了使用transformsublayerTransform..去看看。



查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 608 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信