使用CATransform3DRotate垂直而不是水平地将视图旋转为多维数据集?

时间:2014-09-24 07:31:42

标签: ios uiview xcode6 catransform3drotate

这是我希望在数学课程中能够得到更多关注的时候。通过查看一些示例代码,我已经能够使用UIviews创建一个立方体,我可以左右滑动。以下代码是将我的视图旋转到左侧。这里的UI视图是下面的视图和视图。

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));

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

1 个答案:

答案 0 :(得分: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是控制旋转投影的因子值,将此值与垂直尺寸(高度)相关联将是连贯的。

我希望这会对你有所帮助。