Iphone 如何在保持完整原点的同时拉伸CALayer?

Iphone 如何在保持完整原点的同时拉伸CALayer?,iphone,core-animation,Iphone,Core Animation,我试图通过对UIView应用CATTransferM3DMakeScale来扩展它: CATransform3DMakeScale(0.9, 1.0 - (0.1 * (path.row - midPath.row)), 1) 这个问题有两个方面:它给我留下了分数帧/边界,我似乎无法圆化或落地,它将帧的原点向下拉,使其y原点不再为0 有没有一种方法可以让我的图层只向一个方向拉伸?换句话说,保持x和y原点固定,并向该原点或远离该原点拉伸 此外,是否有文档说明CATTransformM3D中不同m

我试图通过对UIView应用CATTransferM3DMakeScale来扩展它:

CATransform3DMakeScale(0.9, 1.0 - (0.1 * (path.row - midPath.row)), 1)
这个问题有两个方面:它给我留下了分数帧/边界,我似乎无法圆化或落地,它将帧的原点向下拉,使其y原点不再为0

有没有一种方法可以让我的图层只向一个方向拉伸?换句话说,保持x和y原点固定,并向该原点或远离该原点拉伸


此外,是否有文档说明CATTransformM3D中不同mxx变量的影响?我环顾四周,找不到任何一个,尝试和错误只让我走了这么远。

如果您想在拉伸CALayer时保持固定原点,可以更改其
主播点属性,如下所示:

layer.anchorPoint = CGPointMake(0.0f, 0.0f);
anchorPoint
确定将变换应用于层的点。它还与图层的
位置
属性相关联,因此如果调整
锚点
,您可能需要在之后重新定位图层

通过设置定位点,您应该能够将图层设置为整数原点坐标,并使其随变换拉伸。但是,您不会保持完整的宽度和高度

对于CATTransferM3D的
m12
等元素,该结构为4 x 4矩阵:

struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
其中每个值表示矩阵中的一个位置。该矩阵基于OpenGL的三维矩阵,如模型视图矩阵。Core Animation提供了帮助函数来完成您所需的大部分矩阵操作,但您偶尔会设置一个矩阵元素(如用于透视效果的
m34

我从来都不擅长矩阵数学,但你可以查阅人们为OpenGL模型视图矩阵背后的数学编写的任何一本书,并在这里应用它