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

    }




  • 相关阅读:
    localStorage_留言板(储存功能)
    localStorage_留言板01
    localStorage的存储功能
    html表单笔记
    jdbc连接数据库Mysql实例
    (二)SpringMVC学习笔记-HelloWorld
    (一)SpringMVC学习笔记-概述
    animation的相关属性:
    text-transform的各种属性
    ajax请求的时候get 和post方式的区别:
  • 原文地址:https://www.cnblogs.com/Xfsrn/p/5000365.html
Copyright © 2020-2023  润新知