深层切换效果实现原理的理解(类似微信)

来源:互联网 发布:lol扫号器数据 编辑:程序博客网 时间:2024/04/25 17:09

  第三方开源类src,包括一个MLNavigationController类。

1,在self.view上add了一个imageView,放了一个“leftside_shadow_bg“的图片,frame为(-10,0,10,self.view.size.height)。
  作用:在上面一层加了个阴影效果。

2,viewDidLoad中加了一个UIPanGestureRecognizer手势。

3,此类重写了pushViewController方法。

  2push到3的时候,将2的截屏放到了一个screenShotsList数组中。

4,当由3切到2的时候,重点执行手势的方法

- (void)paningGestureReceive:(UIPanGestureRecognizer *)recoginzer。

效果是这样的:3往右滑,2像是渐渐出来,四边有块黑边的view会渐渐消失。

考虑到这,在keyWindow和3的下面放一承载的backGroundView。backgroundView上放2的截屏,2上再add一blackColor的view盖住它。在手势滑动的过程中,只需设置这层black View的alpha即可。设置一个移动距离的最大值,>50时,直接将3frame的x坐标设为320,2frame的x坐标设为0。

   看这段滑动过程中执行的代码:

- (void)moveViewWithX:(float)x

{

    

    NSLog(@"Move to:%f",x);

    x = x>320?320:x;

    x = x<0?0:x;

    

    CGRect frame = self.view.frame;

    frame.origin.x = x;

    self.view.frame = frame;

    

    float scale = (x/6400)+0.95;

    float alpha = 0.4 - (x/800);

      

    lastScreenShotView.transform =CGAffineTransformMakeScale(scale, scale);

    blackMask.alpha = alpha;

    

}

x,即移动距离,x越大,2的scale越大,blak view的alpha越小。

5,结束的时候,重写了pop方法。

将最后一个截屏从数组中remove掉。





原创粉丝点击