iphone - 如何在保持完整原点的同时拉伸(stretch) CALayer?

标签 iphone core-animation

我试图通过应用 CATransform3DMakeScale 来拉伸(stretch)我拥有的 UIView:

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

这个问题有两个方面:它给我留下了分数帧/边界,我似乎无法对其进行舍入或取整,并且它将我的帧的原点拉低,使其 y 原点不再为 0。

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

此外,是否有文档说明 CATransform3D 中不同 mxx 变量的影响?我环顾四周,没有找到任何东西,反复试验只能让我到目前为止。

最佳答案

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

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

anchorPoint 确定将哪些变换应用于图层的点。它还与图层的 position 属性相关,因此,如果您调整 anchorPoint,之后可能需要重新定位图层。

通过设置 anchor ,您应该能够将图层设置在完整的原点坐标处,并使其随着变换而拉伸(stretch)。但是,您不会保持完整的宽度和高度。

就 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 矩阵,如模型 View 矩阵。 Core Animation 提供了辅助函数来完成您需要的该矩阵的大部分操作,但您有时会设置一个矩阵元素(例如用于透视效果的 m34)。

我从来不擅长矩阵数学,但您可以查找人们为 OpenGL 模型 View 矩阵背后的数学而整理的任何文章,并在此处应用它们。

关于iphone - 如何在保持完整原点的同时拉伸(stretch) CALayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5342055/

相关文章:

iphone - 为什么我必须分配一个对象并在 Obj-C 中设置我的实例变量 = 该对象?

iphone - 我怎样才能制作一个水平选择器?

iphone - Sqlite 选择列并删除重复项

cocoa - 我可以在没有 CALayers 的情况下使用 Core Animation 吗?

iphone - NSTimer 对象的最佳值是多少?

javascript - jquery 脚本在桌面上工作,但在 iphone 上滞后

iphone - 共享核心数据和图像到 iCloud

objective-c - 停止绘制 CATiledLayer

ios - 在 iOS 上使用 resizableImages 时避免混合层

objective-c - 可以在 c 结构中使用 CATextLayer 吗?