2012-10-16 68 views
3

我想更改的透視圖,該透視圖位於我的Viewcontroller中。我認爲我必須改變這個UIView層,但我不知道如何。旋轉UIView以給出透視圖

我嘗試下面的代碼,但它不工作

UIView *myView = [[self subviews] objectAtIndex:0]; 
CALayer *layer = myView.layer; 
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity; 
rotationAndPerspectiveTransform.m34 = 1.0/-500; 
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI/180.0f, 0.0f, 1.0f, 0.0f); 
layer.transform = rotationAndPerspectiveTransform; 

我也試着用下面的代碼:

-(void)drawRect:(CGRect)rect { 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGAffineTransform transform = CGAffineTransformIdentity; 
    transform.b = -0.1; 
    transform.a = 0.9; 
    CGContextConcatCTM(ctx,transform); 
    // do drawing on the context 
} 

這也太:

CALayer *layerA = [[self.view.layer sublayers] objectAtIndex:0]; 


    layerA.transform = CATransform3DConcat(layerA.transform, CATransform3DMakeRotation(DEGREES_TO_RADIANS(45),1.0,0.0,0.0) 

他們都沒有工作。我如何改變UIView的視角?

換句話說,我會舉一個例子。圖片這個示例代碼,一個旋轉派RotationPie sample。我想改變它的視角,在x或z asis。

回答

3

您的第一個解決方案適用於我的目標。這似乎是這樣的:

enter image description here

你能證明你的整個類的代碼,如果它不工作一樣在你結束了嗎?

編輯

好吧,我重新配置所提供的代碼示例,展示它是如何可能:

(這裏下載更新的代碼示例:http://www.speedyshare.com/dz469/download/Wheel-demo.zip

而且它看起來像這樣:

enter image description here

我只申請轉化爲基礎子視圖。作爲該視圖的子視圖的所有視圖也將被轉換。如果你想要相應的子視圖有不同的轉換 - 這將是更困難的,因爲,那麼你必須考慮父視圖轉換,計算新的 - 它可以變得非常困難。

但我已經做了一些簡單的多視圖級別轉換。例如 - 達到效果,即視圖比例,移動和旋轉:

  • 我申請運動變換到parentView
  • 我申請旋轉變換到parentViews第一子視圖;
  • 我已經將scale轉換應用於parentViews的第一個子視圖子視圖。

編輯

好吧,我重新配置所提供的代碼示例,展示它是如何可能,爲了讓車輪在轉化位置:

(這裏下載更新的代碼示例: http://www.speedyshare.com/5d8Xq/download/Wheel-demo2.zip

問題是 - 在這種情況下,我正在向車輪本身添加轉換 - 而且看來,車輪也是基於轉換。因此 - 當你觸摸它時 - 它取代了現有的轉換並應用它自己的(當用戶滑動輪子時旋轉箭頭)。

所以 - 當我們與它交互時留下透視圖 - 我們需要另一個視圖圖層。

我創建了一個新的視圖(讓我們稱之爲父視圖),並將輪子作爲子視圖添加到此視圖。

然後我將轉換應用到父視圖而不是輪子。它的工作原理!

我希望它有幫助,你現在更多地瞭解轉型:)

+0

它不適用於我的情況。我有幾個小視圖放在同一視圖中(作爲容器視圖)。當你嘗試做透視變化時,小視圖會彼此分離。我也想在另一個軸上進行旋轉或透視。 – Aitul

+0

下載此示例代碼https://github.com/wczekalski/CDPieMenu想象一下,我想改變這個uiview CDPieMenu的視角,我該怎麼辦? – Aitul

+0

我喜歡你的答案,我知道如何做動畫,但我想一直以透視的角度出現。並且當您選擇一個井的項目以繼續相同的視角。例如,我想以45度的角度來看這個車輪。在具有視角的x asis中,能夠旋轉車輪,並且在最後回答中繼續以45度 – Aitul