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)
可以使用矩阵运算来转换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)
以下示例将生成如下所示的图层

你可以这样做,但你必须惹layer的transform属性,这是一个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)
检查我的数学.应该是对的.
| 归档时间: |
|
| 查看次数: |
2898 次 |
| 最近记录: |