您的位置:首页 > 移动开发 > IOS开发

iOS 类似虾米音乐侧滑动画解析(2)

2016-06-26 20:45 519 查看

    承接上文,分析侧滑效果。我们已经对ContentView(A)做出了分析与大致实现方法。这次,我们去分析背景的实现方式。

         观察,背景,背景图片在滑动的过程中不变,且有高斯模糊效果。视图分为两部分,上方的是用户的一些基本信息(头像,昵称,邮件图标,播放次数,关注,粉丝)下面是有tableview编写的菜单选择,可上下滑动。在ContentView(A)视图滑动过程中,menuViewController (B)中的视图也有线性的变化,位置大小的线性变化。线性变化值可以参考ContentView(A)线性变化比例。[b]并且有点击屏幕使[b]menuView隐形消失效果。[/b][/b]

   那既然这样,我们不妨创建一个总视图(D)包含back[b]imageview(C)、menuviewController(B)、以及contentviewController(A)。在分别建立A、B、C视图,[/b]作为D的子controller。

                                   

        所以,在D中,引入menuviewController
contentviewController , 定义menuviewController
* leftMenuViewController,  contentviewController * contentViewController  定义UIview*menuViewContainer(菜单视图), 
UIview*contentViewContaioner(内容视图), UIimageView*backgroundImageView(背景视图)UIview*gestureRecognizerView(点击手势视图);

       以添加菜单视图为例。

       [self.view addSubview:self.menuViewContainer];

      self.menuViewContainer.frame = self.view.bounds;

      self.menuViewContainer.backgoundColor = [UIColor clearColor];//设置背景色为透明

      if(self.leftmenuviewController

     {

              [self addChildViewController:self.leftMenuViewController];  //作为子Controller;

              //设置一些属性

             self.leftMenuViewController.view.frame = self.view.bounds;

             self.leftMenuViewController.view.background = [UIcolor clearColor]; 

             self.leftMenuViewController.vive.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

             [self.menuViewContainer addSubview:self.leftMenuViewController.view];

             [self.leftMenuViewController didMoveToParentViewController:self];

     }      

     以此,我们类似的给self.contentViewContainer加载 self.ContentViewController.view

     //定义UIPanGestureRecognizer *edgePanGesture

     [self.contentViewContainer addGustureRecognizer:edgePanGesture];  //给contentViewContainer添加移动手势。

     [self.contentViewContainer addSubview:self.gestureRecognizerView];   //将点击手势区域作为contentView的子视图

     //定义点击手势

     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureRecognizer:)];

    [self.gestureRecognizerView addGestureRecognizer:tap];

     //滑动contentViewContainer时,可参见上片,contentViewContainer手势方法

      - (void)panGestureRecognizer:(UIScreenEdgePanGestureRecognizer
*)recognizer{


      CGPoint point = [recognizertranslationInView:self.view];

    if (recognizer.state ==UIGestureRecognizerStateBegan)
{

       //添加阴影,在http://www.jianshu.com/p/3a350bb9d9ee下载工程,YQSlideMenuController里有完整步骤,可参考。

     }elseif(recognizer.state ==UIGestureRecognizerStateChanged){

  float trueDistance = distance + point.x; //实时距离。

     //计算上文提到的y与x的关系方法。

     //平移与缩放的动画

     //判断不同的状态情况,填写不同的平移缩放参数

      self.contentViewContainer = CGpointMake(self.view.center.x +
trueDistance,self.view.center.y); //中心点平移
      self.contentViewContainer =CGAffineTransformScale(CGAffineTransformIdentity,y,y);
CGAffineTransformScale 缩放方法。
      self.menuViewContainer.transform = CGAffinerTransformMakeScale(a,b);
      self.menuViewContainer.transform = CGAffinerTransformScale(self.menuViewContainer.transform,m,n);

     }elseif(recognizer.state ==UIGestureRecognizerStateEnded){

    //根据位置做自动停靠,也可结合手势滑动的方向做自动停靠,判断MenuView是否显示的状态。

    }

}

   //我们应该设置点击时候,有一个判断Menu是否处于显示与隐藏的状态。BOOL menuHidden; 并且在上述滑动手势判断时候,把对应的情况加进去。提供点击方法,在点击中做Menu的显示与隐藏的方法。

 -(void)tapGestureRecgnizer:(UITapGextureRecognizer *)recognizer{

    if(!self.menuHidden){

       [self hideMenu];

     }

  }  

 
-(void)hideMenu{

    if(!self.menuHidden){

       [self shoeMenu:NO];

    }

  }

  - (void)shoeMenu:(BOOL)show{

    //主要是做显示与隐藏的动画效果,利用UIView animateWithDurantion time animations:^{}方法;

    [UIView animateWithDuration:duration aninations:^{

       if(show){

         self.contentViewContainer.transform = CGAffinerTransformMakeTranslation();

         self.contentViewContainer.transform = CGAffinerTransformScela();

         self.menuViewContainer.transform = CGAfinerTransformIdentity;

       }else{

        
self.contentViewContainer,transform = CGAffinerTransformIndetity;

         self.contentViewScale = 1;

         self.menuViewContainer.transform = CGAffineTransformMakeScale();

         self.menuViewContainer.transform = CGAffinerTransformTranslate();

       }

    }completion:^(BOOL finished){

         self.menuHidden = !show;

         self.gestureRecognizerView.hidden = !show;

    }];

 }

    
大致。思路,如此。有些逻辑判断并没有展示出来,以借鉴,以分析,以宽容,以希望与努力。

     

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios动画