zoukankan      html  css  js  c++  java
  • iOS开发核心动画之图片折叠/渐变层

    1. 显示效果

     

    2. 代码实现

    #import "ViewController.h"


    @interface ViewController ()


    @property (weaknonatomicIBOutlet UIImageView *topV;


    @property (weaknonatomicIBOutlet UIImageView *bottomV;



    @property (weaknonatomicIBOutlet UIView *touchView;


    /** 渐变层 */

    @property (nonatomicweakCAGradientLayer *gradient;


    @end


    @implementation ViewController


    - (void)viewDidLoad {

        

        [super viewDidLoad];

        

        // 显示上半部分

        self.topV.layer.contentsRect = CGRectMake(0010.5);

        self.topV.layer.anchorPoint = CGPointMake(0.51);

        

        // 只显示下半部分

        self.bottomV.layer.contentsRect = CGRectMake(00.510.5);

        self.bottomV.layer.anchorPoint = CGPointMake(0.50);

        

        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer allocinitWithTarget:self action:@selector(pan:)];

        [self.touchView addGestureRecognizer:pan];

        

        // 渐变层

        CAGradientLayer *gradient = [CAGradientLayer layer];

        gradient.frame = self.bottomV.bounds;

        // 设置渐变颜色

        gradient.colors = @[(id)[UIColor clearColor].CGColor,(id)[UIColor blackColor].CGColor];

        

        // 设置图层的不透明度

        gradient.opacity = 0;

        self.gradient = gradient;

        [self.bottomV.layer addSublayer:gradient];

        

    }


    - (void)pan:(UIPanGestureRecognizer *)pan

    {

        CGPoint offset = [pan translationInView:self.touchView];

        

        CGFloat angle = offset.y * M_PI / 200.0;

        

        CATransform3D transform = CATransform3DIdentity;

        transform.m34 = -1 / 300.0;

        

        self.topV.layer.transform = CATransform3DRotate(transform, -angle, 100);

        

    //    [pan setTranslation:CGPointZero inView:self.touchView];

        

        // 修改渐变层的不透明度

        self.gradient.opacity = offset.y / 200.0;

        

        // 判断手指松开上面的图片复位

        if (pan.state == UIGestureRecognizerStateEnded) {

            self.gradient.opacity = 0;

            

            //Duration:动画的执行时长

            //delay:动画延迟执行的时间

            //SpringWithDamping:弹性系数.

            //SpringVelocity:弹性的初始速度.

            [UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.25 initialSpringVelocity:0 options:UIViewAnimationOptionCurveLinear animations:^{

                self.topV.layer.transform = CATransform3DIdentity;

            } completion:^(BOOL finished) {

                

            }];

        }

        

    }



    //渐变层

    - (void)gradientLayer{

        CAGradientLayer *gradient = [CAGradientLayer layer];

        gradient.frame = self.bottomV.bounds;

        //设置渐变的颜色

        gradient.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor greenColor].CGColor,(id)[UIColor blueColor].CGColor];

        

        //修改渐变的方向

        gradient.startPoint = CGPointMake(00);

        gradient.endPoint = CGPointMake(10);

        //设置渐变的起始位置(从哪点开始渐变到下一个颜色)

        gradient.locations = @[@0.3,@0.7];

        [self.bottomV.layer addSublayer:gradient];

    }




  • 相关阅读:
    .NetMVC过滤器
    Vue-cli配置
    回顾2019年到今天
    八皇后问题
    约瑟夫环问题
    斐波那契函数列
    提高学习效率的方法
    感受爱阅读笔记
    Android IO流汇总
    Android的AsyncTask
  • 原文地址:https://www.cnblogs.com/Xfsrn/p/5000365.html
Copyright © 2011-2022 走看看