回答
你可以這樣做,但你會必須弄亂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. 如何歪斜Cocos2d iPhone中的CCSprite?
- 2. 歪斜的圖像
- 3. Flex歪斜對象
- 4. 歪斜的背景圖像
- 5. Android - 歪斜的按鈕
- 6. 歪斜後的DIV位移
- 7. 滑塊點 - CSS3歪斜斜他們
- 8. 如何歪斜圖像?
- 9. 蟒蛇隨機歪斜
- 10. 多邊形歪斜算法
- 11. 星火歪斜數據
- 12. 歪斜號碼發生器
- 13. CSS3歪斜各個角落
- 14. S3 RequestTimeTooSkewed錯誤歪斜
- 15. iOS iPhone:爲什麼我的圖像旋轉歪斜圖像?
- 16. 歪斜的div中的背景圖片
- 17. OpenGL的紋理座標被歪斜
- 18. postscript中的中心剪切/歪斜
- 19. 我的代碼在Outlook 2010中歪斜
- 20. 歪斜的二叉搜索樹
- 21. Chrome中的圖像歪斜問題
- 22. OpenGL旋轉歪斜的問題
- 23. 歪斜或剪切python中的圖像
- 24. Android:繪製歪斜的角落形狀
- 25. 電源查詢歪斜的數據
- 26. 歪斜的邊框上一個div
- 27. CSS:繪製歪斜的邊界
- 28. 歪斜四邊形的面積
- 29. 爲什麼我的列表項歪斜?
- 30. R中的多變量歪斜
您需要將其中一個答案標記爲正確。 – 2011-06-01 20:05:48