侧面菜单的盒子翻转3D动画

时间:2016-07-26 07:11:28

标签: ios objective-c animation menu uiscrollview

我有scrollview和内部scrollview我有2个视图作为MainView,另一个作为SideMenuView。

我想制作如下动画。

enter image description here

知道需要做些什么来实现这个目标吗?

3 个答案:

答案 0 :(得分:3)

下面的Psuedo代码:

- (void)animateSideMenu{
homeView.frame = CGRectMake(sideMenuWidth, 0.0, (self.view.frame.size.width - sideMenuWidth), self.view.frame.size.height);
[UIView animateWithDuration:1.0 delay:0.0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
                     sideMenu.frame = CGRectMake(0.0, 0.0, sideMenuWidth, sideMenuHeight);
                     [self flipAnimation];
} completion:^(BOOL finished) {

}];
}

- (void)flipAnimation{
CABasicAnimation *yRotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
yRotate.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0, 1, 0)];
yRotate.toValue = @(M_PI * 1.5);
yRotate.duration = 0.5;
yRotate.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[sideMenu.layer addAnimation:yRotate forKey:@"yRotate"];
}

以下是开发此类动画的步骤:

  1. 设置屏幕尺寸&的homeView(红色视图)的框架。在此视图中添加平移手势。
  2. 在负x轴上设置sideMenu视图的框架。
  3. 为平移手势识别器创建响应函数,在此函数中调用上述animateSideMenu函数。
  4. 相应地调整动画参数。
  5. 试试这个&如果有什么事情发生,请告诉我。

答案 1 :(得分:1)

我不会使用滚动视图,而是使用UIPanGestureRecognizer,我会在其中检测当前的#pan; pan offset"并计算动画的当前分数和这两个视图的位置(让我们简化它,使菜单为view1,其余为view2)。 然后我只需在.Changed状态中设置一个合适的变换。 在.Ended状态下,我会看到菜单是否更接近打开或关闭,并创建一个相应设置.toValue的动画。您应该使用CAAnimations或更好 - Facebook pop动画,因为您可以暂停和删除它们,并且视图保持不变并且不会跳转到其初始位置(通常是UIViewAnimate的情况)。

如果您需要帮助编写确切的代码,可以在这里写,我会编辑我的答案。

答案 2 :(得分:1)

有关于该菜单的教程,尽管它在Swift中: https://www.raywenderlich.com/87268/3d-effect-taasky-swift