1

我正在为从上方落到板上的对象设置动画,并且我想在对象落在板上时为板“回落”设置动画。物体可以在板上的任何位置掉落,当板“后退”时,我将板缩放到更小的比例。

当使用 CGAffineTransformScale 对象缩放基于它们的锚点,对象的中心;我想缩放电路板,然后将转换后的电路板与掉落在其上的物体对齐,以便掉落的物体相对于电路板似乎停留在同一位置(或者,更准确地说,电路板停留在相对于电路板位置的相同位置)。

我花了好几个小时将锚点更改为对象落下的位置,但这揭示了我对 layer.anchorPoint 实际工作方式的基本误解。

我想解决方案是从板的中心导出一个向量到给定的坠落物体,然后以某种方式调整板在转换中的位置,使其在同一个地方。这就是我需要帮助的地方!

正如您在这些情况下所期望的那样,需要一个动画 gif。 在此处输入图像描述

4

1 回答 1

2

CALayeranchorPoint属性 用于此目的的正确属性,但它在单位坐标空间中工作的一个小烦恼,即它从 0 到 1,而不是像素:

您可以使用单位坐标空间指定此属性的值。该属性的默认值为 (0.5, 0.5),表示图层边界矩形的中心。对视图的所有几何操作都围绕指定点进行。例如,对具有默认锚点的图层应用旋转变换会导致图层围绕其中心旋转。将锚点更改为不同的位置会导致图层围绕该新点旋转。

因此,以像素为单位设置锚点显然会导致一些非常奇怪的行为。您需要在单位坐标空间中计算新的锚点才能正常工作,因此,不要这样做:

board.layer.anchorPoint = CGPointMake(ball.x, ball.y);

你会这样做:

board.layer.anchorPoint = CGPointMake(ball.x / board.layer.bounds.size.width,
                                      ball.y / board.layer.bounds.size.height);

更新:当您更改anchorPoint属性时,视图将移动,因为anchorPoint在单位坐标空间中相对于图层设置的 被锚定到position在超级视图的坐标空间中设置的图层属性。这样,当您更改anchorPoint属性的值时,视图将移动,使得新锚点处的点与旧锚点位于同一位置。如本答案中所述,您将需要对此进行补偿。

于 2013-07-13T06:08:25.057 回答