1

这是我希望我能在我的数学课程中更加关注的时候。通过查看一些示例代码,我已经能够使用 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));

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

4

1 回答 1

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是控制旋转投影的因子值,将这个值与垂直尺寸(高度)相关联是一致的。

我希望这可以帮助你。

于 2014-09-30T07:45:51.433 回答