iPhone歪斜了一个CALayer

MaR*_*dMe 4 iphone calayer

我是初学者,我正在做一些练习来熟悉CALayer ......

我只是想知道如何"倾斜"(或倾斜)CALayer 45°角?

谢谢.

Tom*_*mmy 12

CALayers有一个属性,affineTransform需要CAAffineTransform.该文件明确指出:

缩放,旋转和平移是仿射变换支持的最常用的操作,但也可能存在偏移.

(明显强调我的)

没有内置帮助器来构造偏斜变换,但你可以做一些像(未经测试的):

CGAffineTransform CGAffineTransformMakeSkew(CGFloat skewAmount)
{
    CGAffineTransform skewTransform = CGAffineTransformIdentity;
    skewTransform.b = skewAmount;
    return skewTransform;
}
Run Code Online (Sandbox Code Playgroud)

然后,对于倾斜使得垂直的东西与水平方向成45度,你会使用:

layer.affineTransform = CGAffineTransformMakeSkew(1.0f);
Run Code Online (Sandbox Code Playgroud)


DHa*_*ick 8

可以使用矩阵运算来转换CALayers.偏斜变换由以下矩阵表示

在此输入图像描述

因此,如果要沿x轴进行倾斜变换,可以使用以下示例.

CALayer* layer = [CALayer layer];
layer.frame = CGRectMake(50,50,50,50);
layer.backgroundColor = [UIColor blueColor].CGColor;
[self.window.layer addSublayer:layer];

float theta = -45.0f;
CGAffineTransform t = CGAffineTransformIdentity;
t.b = tan(theta*M_PI/180.0f);
layer.transform = CATransform3DMakeAffineTransform(t);
Run Code Online (Sandbox Code Playgroud)

以下示例将生成如下所示的图层

在此输入图像描述


Ale*_*ers 7

你可以这样做,但你必须惹layertransform属性,这是一个struct CATransform3D.你将不得不做一些矢量数学来做这件事.有关详细信息,请参阅此答案中compute_transform_matrix(...)功能.

你会想做这样的事情:

CGRect r = layer.bounds;
layer.transform = compute_transform_matrix(r.origin.x,    r.origin.y,                 r.size.width,                 r.size.height,
                                           r.size.height, r.origin.y,                 r.size.width + r.size.height, r.origin.y,
                                           r.origin.x,    r.origin.y + r.size.height, r.size.width,                 r.origin.y );
Run Code Online (Sandbox Code Playgroud)

检查我的数学.应该是对的.