【问题标题】:Rotate views as a cube with CATransform3DRotate vertically instead of horizontally?使用 CATransform3DRotate 垂直而不是水平旋转视图作为立方体?
【发布时间】:2014-09-24 07:31:42
【问题描述】:

这是我希望我能在数学课程中更加专注的时候。通过查看一些示例代码,我已经能够使用 UIviews 制作一个立方体,我可以左右滑动。以下代码是将我的视图向左旋转。这里的 UIviews 是 view 和 view2 下面。

float rotation = (percent*90.0);
float fProject = (pc_width_page/2.0)*sinf(toRadians(rotation));
view.layer.transform = CATransform3DRotate(CATransform3DTranslate(t, 0.0, 0.0, -1.0*(fProject)), toRadians(rotation), 0.0, 1.0, 0.0);
view.center = CGPointMake((self.frame.size.width/2.0)+fProject, floorf(self.frame.size.height/2.0));
//View2
rotation = (percent*90.0)+90.0;
fProject = (pc_width_page/2.0)*sinf(toRadians(rotation));
view2.layer.transform = CATransform3DRotate(CATransform3DTranslate(t, 0.0, 0.0, -1.0*(fProject)), toRadians(rotation+180), 0.0, 1.0, 0.0);
view2.center = CGPointMake((self.frame.size.width/2.0)-fProject, floorf(self.frame.size.height/2.0));

现在我的问题是,我应该在这里修改什么来制作相同的动画,但向上或向下而不是向左旋转它们。我尝试自己更改它,因为我知道对图层进行了平移和旋转,但我没有得到我期望的结果。任何帮助将不胜感激。

【问题讨论】:

  • 如果我的问题很糟糕,如果我知道它为什么不好以便我可以改进它可能会有所帮助。谢谢。

标签: ios uiview xcode6 catransform3drotate


【解决方案1】:

根据参考,CATransform3DRotate 将 CATransform3D 对象、角度和旋转矢量的 x、y、z 分量作为输入。

CATransform3D CATransform3DRotate ( CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z );

旋转向量总是垂直于旋转椭圆,所以如果你想要一个在 y 和 z 轴上移动的旋转(垂直旋转),你的旋转向量是 (x,y,z) = (1.0,0.0, 0.0)。

由于在两种情况下(水平和垂直旋转)都在 z 轴上执行投影,因此可以保持 CATransform3D 对象。

关于中心,投影应该应用于垂直坐标。所以修改后的例子如下:

float rotation = (percent*90.0);
float fProject = (pc_height_page/2.0)*sinf(toRadians(rotation));
view.layer.transform = CATransform3DRotate(CATransform3DTranslate(t, 0.0, 0.0, -1.0*(fProject)), toRadians(rotation), 1.0, 0.0, 0.0);
view.center = CGPointMake(floorf(self.frame.size.width/2.0), (self.frame.size.height/2.0) - fProject);

鉴于pc_width_page是一个用于控制旋转投影的因子值,将这个值与垂直尺寸(高度)相关联是一致的。

希望对你有帮助。

【讨论】:

  • 感谢您的解释。我在一个新项目中对此进行了测试,并删除了一堆额外的代码,它工作正常。似乎我有一些额外的代码会导致视图旋转出现一些问题,但这是一个完全独立的问题。现在我知道我在正确的轨道上!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多