gpt4 book ai didi

ios - 核心动画 : moving a layer along a plane

转载 作者:可可西里 更新时间:2023-11-01 06:25:08 29 4
gpt4 key购买 nike

我正在开发一款纸牌游戏,其中纸牌以透视方式显示在 table 上。 table 和卡片都有相同的 x 旋转 (45°)。

随着卡片离玩家越来越远(在 table 上“向上”移动),我希望它们变小。我认为只需修改他们的 z 平移(或 z 比例)我就可以达到预期的效果,但事实并非如此。

我是否必须同时移动缩放它,或者有没有办法改变 z 深度并让 Core Animation 为我处理所有事情?

谢谢!

最佳答案

除了在 “Modifying the Transform Data Structure” in the Core Animation Programming Guide 下的示例中外,没有直接记录这些内容:

The example in Listing 2 illustrates how to configure a CATransform3D as a perspective transform.

Listing 2 Modifying the CATransform3D data structure directly

 CATransform3D aTransform = CATransform3DIdentity;
// the value of zDistance affects the sharpness of the transform.
zDistance = 850;
aTransform.m34 = 1.0 / -zDistance;

这是怎么回事? 3D 变换矩阵是一个 4x4 矩阵(不是您所期望的 3x3 矩阵)。第三行的第四列(从一开始计数,不是零)控制沿 Z 轴的透视变换。将它设置为从“相机”到 Z=0 平面(您可以将其视为屏幕)的距离的负倒数。

默认情况下,m34 为零,这意味着从相机到屏幕的距离是无穷大。在无穷远处,每个(有限)点都与相机等距,因此没有透视。这称为“正交投影”。

当您将距离设置为较小的值(这会使 m34 变大)时,您会得到越来越强的透视投影。您会想要玩弄值(value)来找到您喜欢的。

大多数层将其子层展平到 Z=0 平面中。这意味着您应用于层的透视投影不会应用于其子层,并且您必须设置每个子层的变换。

如果您不需要用户能够点击特定卡片,您应该将卡片层添加为 CATransformLayer 的子层。 CATransformLayer 不会将其子层展平到 Z=0 平面中,因此您可以将透视投影变换仅应用于 CATransformLayer,并且您不必担心将其应用于各个卡片层。但是,CATransformLayer 不支持 hitTest:,因此您无法轻松确定触摸事件触摸了哪些卡片。

CATransformLayer Class Reference

关于ios - 核心动画 : moving a layer along a plane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105150/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com