• 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];

    }




  • 相关阅读:
    DeepLearning4J 环境搭建【转】
    MxNet C++和python环境配置
    Vmvare + Ubuntu 16.04环境搭建 + 相关软件安装配置笔记【深度学习】
    caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)
    pycaffe + anaconda2 + python2.7.配置
    【Win7 x64】+【annaconda3】+ 【python3.5.2】+【tensorflow-gpu】 [最终配置 gtx 940mx + Cuda8.0+cudnn v5.1 + tensorflow-gpu1.0.0 ]
    tensorboard的使用
    windows + python3.5.2 + anaconda3 + dlib 安装配置
    [python]selenium常用的操作
    [python]Pytest+selenium+git+jenkins持续集成
  • 原文地址:https://www.cnblogs.com/Xfsrn/p/5000365.html
Copyright © 2020-2023  润新知