iphone – 如何在保持积分原点的同时伸展CALayer?

我试图通过应用CATransform3DMakeScale来扩展我拥有的UIView:

CATransform3DMakeScale(0.9, 1.0 - (0.1 * (path.row - midPath.row)), 1)

这个问题有两个方面:它给我留下了分数帧/边界,我看起来似乎不是圆形或地板,而是它将我的框架的原点拉下来,使得它的原点不再是0.

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

另外,是否存在CATransform3D中不同mxx变量影响的文档?我环顾四周找不到任何东西,试验和错误只让我到目前为止.

最佳答案 如果要在拉伸CALayer时保持固定原点,可以更改其anchorPoint属性,如下所示:

layer.anchorPoint = CGPointMake(0.0f, 0.0f);

anchorPoint确定将哪些转换应用于图层的点.它也与图层的位置属性相关联,因此如果您调整anchorPoint,则可能需要在之后重新定位图层.

通过设置锚点,您应该能够将图层设置为整数原点坐标,并使其与变换一起拉伸.但是,您不会保持整体的宽度和高度.

至于CATransform3D的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的3-D矩阵,如模型视图矩阵.核心动画提供辅助函数来完成你需要的大部分矩阵操作,但是你不时会设置一个矩阵元素(比如m34的透视效果).

我从来都不擅长矩阵数学,但你可以查找人们为OpenGL模型视图矩阵背后的数学编写的任何文章,并在此处应用.

点赞