2013-05-13 20 views
0

我想將視圖從平行於地面的平面轉換爲垂直於地面的平面。如何將UIView從平行於地面變爲垂直?

任何想法?

+2

澄清:你想從平行於地面的平面變換圖與地面垂直的平面? – 2013-05-13 19:14:45

+0

@MattBall是的,謝謝你:) – Mario 2013-05-13 19:19:01

+0

@MattBall,我真的不明白爲什麼這不是一個真正的問題?顯然,由於語言限制和這個問題的性質,我很難解釋我的自我,但除此之外,我認爲這是一個合法的問題,我在嘗試之前嘗試了很多東西,在谷歌上搜索(不容易搜索這個具體的問題.. ),嘗試玩CATransform3DScale和更多.. MattBall我不明白,你幫助我澄清問題,但隨後關閉q? – Mario 2013-05-14 08:00:13

回答

0

要在3D中旋轉視圖,您需要修改視圖圖層的transform屬性。

這聽起來像你想圍繞X軸旋轉視圖。我想你想要透視,靠近觀看者的邊緣看起來更大,離觀看者更遠的邊緣看起來更小。

我們將編寫一個幫助函數進行轉換。我們先從身份轉換:

static CATransform3D transformWithAngle(CGFloat angle) { 
    CATransform3D transform = CATransform3DIdentity; 

然後設置的變換基於從觀衆角度的距離m34組件:

transform.m34 = -1.0f/300.0f; 

如果使用的是300大的數量,視角會變弱。如果您使用的號碼小於300,則視角會更強。

接下來,添加旋轉:

transform = CATransform3DRotate(transform, angle, 1, 0, 0); 

然後返回變換:

return transform; 
} 

比方說,你想這個應用到一個名爲self.riseView視圖。你可能需要的旋轉方向是圍繞視圖的底部邊緣,所以該層的錨點設置爲底邊:

- (void)viewDidLoad { 
    CGRect frame = self.riseView.frame; 
    self.riseView.layer.anchorPoint = CGPointMake(0.5f, 1.0f); 
    self.riseView.frame = frame; 

並初始化層與0°的角度變換:

self.riseView.layer.transform = transformWithAngle(0); 
} 

您可以通過它旋轉到-M_PI_2的角度進行查看「設置」(旋轉打倒在地平面):

- (IBAction)setButtonWasTapped:(id)sender { 
    [self animateRiseViewToAngle:-M_PI_2]; 
} 

,你可以把它「上升」(向上旋轉)通過它旋轉到零角度:

- (IBAction)riseButtonWasTapped:(id)sender { 
    [self animateRiseViewToAngle:0]; 
} 

下面是我們如何真正做動畫:

- (void)animateRiseViewToAngle:(CGFloat)angle { 
    [UIView animateWithDuration:2 animations:^{ 
     self.riseView.layer.transform = transformWithAngle(angle); 
    }]; 
}