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

}




原文地址:https://www.cnblogs.com/Xfsrn/p/5000365.html