的請多多包涵一個單一軸的旋轉,我在矩陣數學是非常糟糕的。我有一層,我希望在參考環境中保持「靜止」,而手機旋轉到其他姿態。我有一個很好的MotionManager中工作,現在用在目前的態度multiplyByInverseOfAttitude,並應用所產生的增量爲旋轉使用CMRotationMatrix我的層(做獨立CATransform3DRotates的俯仰,滾轉和偏航引起的軸附近相當的古怪)。它的基本靈感來自代碼like this example。反向CMRotationMatrix
我Concat的這另一個變換之前,我應用旋轉到我的層應用M34角度把戲。
[attitude multiplyByInverseOfAttitude:referenceAttitude];
CATransform3D t = CATransform3DIdentity;
CMRotationMatrix r = attitude.rotationMatrix;
t.m11=r.m11; t.m12=r.m12; t.m13=r.m13; t.m14=0;
t.m21=r.m21; t.m22=r.m22; t.m23=r.m23; t.m24=0;
t.m31=r.m31; t.m32=r.m32; t.m33=r.m33; t.m34=0;
t.m41=0; t.m42=0; t.m43=0; t.m44=1;
CATransform3D perspectiveTransform = CATransform3DIdentity;
perspectiveTransform.m34 = 1.0/-650;
t = CATransform3DConcat(t, perspectiveTransform);
myUIImageView.layer.transform = t;
結果是漂亮,就像你所期望的,該層保持靜止的重力爲我四處移動我的手機,除了單個軸,y軸;手機保持平放並滾動,圖層按照手機的方向雙倍滾動,而不是保持靜止。
我不知道爲什麼這樣一個軸移動,而其他移動應用multiplyByInverseOfAttitude之後正確錯誤。當使用單獨的CATransform3DRotates進行俯仰,偏航,滾動時,我可以通過將滾動矢量乘以-1來輕鬆地解決問題,但我不知道如何將其應用於旋轉矩陣。這個問題顯然只有在你將觀點引入方程後纔可見,所以也許我做錯了。反轉我的m34值可以修正搖擺,但會在球場上產生同樣的問題。我需要弄清楚爲什麼這個軸上的旋轉是向後的,通過矩陣反轉該軸上的旋轉,或者以某種方式修正透視。
謝謝,馬庫斯,該代碼完美地工作。在我旋轉手機時,圖層看起來在所有軸上保持靜止。 雖然,結果引入了另一個問題。我希望通過使用矩陣數學,我會避免在軸上的任何奇怪行爲,但是會發生一些奇怪的事情。當我撥動我的手機,穿過圖層的「頂部邊緣」時,圖層不會繼續平穩地旋轉。相反,當我接近軸線時,圖層偏離軸線,所以我無法直接穿過它的邊緣。這是我正在做的旋轉類型的標準特徵嗎? –