回答
你可以這樣做,但你會必須弄亂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