2012-06-07 57 views
3

後,我試圖使像一個你可以在這裏看到一個摺疊的Facebook菜單:http://www.mobileinc.co.uk/2012/05/folding-iphone-sidebar-menu/CATransform3DRotate CATransform3DTranslate

現在,我中庸之道的「摺疊」的部分工作。我有2層: - 左層具有錨固點,在{1,0.5} - 右層具有在錨點{0,0.5}

我可以使他們在我的主要的中間折查看沒有這樣的問題: CGFloat width = self.view.frame.size.width; CGFloat destinationWidth = slider.value * width;

CGFloat hypothenuse = self.view.frame.size.width/2.0f; 
CGFloat adjacent = destinationWidth/2.0f; 
CGFloat opposite = sqrtf(powf(hypothenuse, 2)-powf(adjacent, 2)); 

CGFloat marginLeft = (width - destinationWidth)/2; 

CGFloat angle = asinf(opposite/hypothenuse); 

CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0f/-4000.0f; 

rightSide.layer.transform = CATransform3DRotate(CATransform3DTranslate(transform,0,0,-opposite),-angle, 0, 1, 0); 
leftSide.layer.transform = CATransform3DRotate(CATransform3DTranslate(transform,0,0,-opposite),angle, 0, 1, 0); 

這很好用。問題是當我嘗試在x軸上這樣翻譯我的層: CATransform3DTranslate(變換,-marginLeft,0,-opposite)

層仍與良好的z平移倍,但它與一個尷尬的角度結束如果整個視圖已經旋轉。

這顯然與角度(當我不設置M34,它「工程」),但我想不出如何補償吧...

預先感謝您!

乾杯,

TeuBeu2

+0

我理解它與消失點做的,但我不能去改變它。我嘗試修改主視圖定位點,但它似乎不起作用... – TeuBeu2

+0

使用-opposite進行z翻譯有什麼作用? – Nico

回答

0

您撰寫4個變換,順序如下:

  1. 旋轉
  2. 翻譯ž
  3. 翻譯X
  4. 項目

問題是你想在投影之後做翻譯X,而不是之前。實際上,您正在用投影將摺疊拉回中心位置。試試這個:

CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0f/-4000.0f; 

transform = CATransform3DConcat(transform, CATransform3DMakeTranslation(-marginLeft,0,0)); 

rightSide.layer.transform = ... 

聲明:我沒有實際測試此

相關問題