回答
你可以这样做,但你会必须弄乱layer
的transform
财产,这是一个struct CATransform3D
。和你一样,你将不得不做一些矢量数学来做到这一点。有关更多详细信息,请参见this answer中的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);
检查这个我的数学。它应该是正确的。
Thnak你Alexsander! – MaRiriAndMe 2011-06-01 16:10:03
CALayers有一个财产,affineTransform
需要CAAffineTransform。该文档明确指出:
缩放,旋转和平移是 通过仿射变换支持最常用的操作 ,但 偏斜也可能。
(重点煤矿,很明显)
有没有内置的辅助构建歪斜变换,但你可以这样做(未经测试):
CGAffineTransform CGAffineTransformMakeSkew(CGFloat skewAmount)
{
CGAffineTransform skewTransform = CGAffineTransformIdentity;
skewTransform.b = skewAmount;
return skewTransform;
}
然后,歪斜等那些垂直的东西与水平线成45度角:
layer.affineTransform = CGAffineTransformMakeSkew(1.0f);
谢谢汤米! – MaRiriAndMe 2011-06-01 16:09:47
或确实http://stackoverflow.com/a/18775067/294884 – Fattie 2016-05-21 17:43:45
可以使用矩阵运算来转换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);
下面的示例将导致如下所示
层谢谢DHamrick! – MaRiriAndMe 2011-06-01 16:10:25
你的3个答案对我来说非常有用,它允许我继续练习! – MaRiriAndMe 2011-06-01 16:11:19
所有优秀的答案,谢谢大家 – Fattie 2016-05-21 17:44:35
有关于如何转变工作了大量的资源,它需要一点时间来真正了解他们(至少对我来说),这里有一些直接的代码,它确保指出应用了变换的轴。
/*!
* Positive `skewX` creates a shift to the left.
* Negative `skewX` creates a shift to the right.
*
* `skewX` is NOT pixel based. Test values of 0.0f - 1.0f.
*/
CGAffineTransform CGAffineTransformMakeSkewX(CGFloat skewX)
{
return CGAffineTransformMakeSkew(skewX, 0.0f);
}
/*!
* Positive `skewY` creates a shift to the bottom.
* Negative `skewY` creates a shift to the top.
*
* `skewY` is NOT pixel based. Test values of 0.0f - 1.0f.
*/
CGAffineTransform CGAffineTransformMakeSkewY(CGFloat skewY)
{
return CGAffineTransformMakeSkew(0.0f, skewY);
}
/*!
* Positive `skewX` creates a shift to the left.
* Negative `skewX` creates a shift to the right.
*
* Positive `skewY` creates a shift to the bottom.
* Negative `skewY` creates a shift to the top.
*
* The skew values are NOT pixel based. Test values of 0.0f - 1.0f.
*/
CGAffineTransform CGAffineTransformMakeSkew(CGFloat skewX, CGFloat skewY)
{
return CGAffineTransformMake(1.0f, skewY, skewX, 1.0f, 0.0f, 0.0f);
}
- 1. Flex歪斜对象
- 2. 歪斜的背景图像
- 3. 歪斜后的DIV位移
- 4. CSS3歪斜各个角落
- 5. 歪斜号码发生器
- 6. S3 RequestTimeTooSkewed错误歪斜
- 7. 蟒蛇随机歪斜
- 8. 多边形歪斜算法
- 9. iOS iPhone:为什么我的图像旋转歪斜图像?
- 10. 歪斜的div中的背景图片
- 11. R中的多变量歪斜
- 12. 电源查询歪斜的数据
- 13. 为什么我的列表项歪斜?
- 14. CSS:绘制歪斜的边界
- 15. Chrome中的图像歪斜问题
- 16. OpenGL的纹理坐标被歪斜
- 17. Android:绘制歪斜的角落形状
- 18. postscript中的中心剪切/歪斜
- 19. 歪斜div,unskew伪元素背景
- 20. 添加歪斜以改善时序
- 21. 歪斜检测和减少opencv
- 22. 歪斜时图像不旋转吗?
- 23. 盒子有歪斜和背景图像
- 24. imagemagick歪斜或扭曲图像
- 25. 歪斜按钮一侧whitout改变HTML
- 26. iPhone SDK - CALayer崩溃
- 27. R扩展的摘要数值,包括峰度,歪斜等?
- 28. R在绘制TIFF图像时歪斜的颜色
- 29. 如何拟合pymc3中呈现歪斜的数据
- 30. 猪将如何处理歪斜的加入?
您需要将其中一个答案标记为正确。 – 2011-06-01 20:05:48