iOS开发核心动画之图片折叠/渐变层

1. 显示效果

2. 代码实现

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *topV;

@property (weak, nonatomic) IBOutlet UIImageView *bottomV;

@property (weak, nonatomic) IBOutlet UIView *touchView;

/** 渐变层 */

@property (nonatomic, weak) CAGradientLayer *gradient;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 显示上半部分

self.topV.layer.contentsRect = CGRectMake(0, 0, 1, 0.5);

self.topV.layer.anchorPoint = CGPointMake(0.5, 1);

// 只显示下半部分

self.bottomV.layer.contentsRect = CGRectMake(0, 0.5, 1, 0.5);

self.bottomV.layer.anchorPoint = CGPointMake(0.5, 0);

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget: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, 1, 0, 0);

//    [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(0, 0);

gradient.endPoint = CGPointMake(1, 0);

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

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

[self.bottomV.layer addSublayer:gradient];

}

时间: 2024-07-29 18:17:12

iOS开发核心动画之图片折叠/渐变层的相关文章

IOS开发核心动画篇---核心动画简介

iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation是跨平台的,可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.不阻塞主线程,可以理解为在执行动画的时候还能点击(按钮). 要注意的是,Core Animation是直接作用

IOS开发核心动画篇—转场动画和组动画

iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果 属性解析: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(在整体动画的百分比)

iOS开发-核心动画高级编程Core Animation系列(转)

iOS-Core-Animation-Advanced-Techniques 转 GitHub译文 iOS核心动画高级编程全集 iOS-核心动画高级编程/1-图层树 iOS-核心动画高级编程/2-寄宿图 iOS-核心动画高级编程/3-图层几何学 iOS-核心动画高级编程/4-视觉效果 iOS-核心动画高级编程/5-变换 iOS-核心动画高级编程/6-专有图层 iOS-核心动画高级编程/7-隐式动画 iOS-核心动画高级编程/8-显示动画 iOS-核心动画高级编程/9-图层时间 iOS-核心动画高

ios开发核心动画五:图标抖动效果--CAKeyframeAnimation

#import "ViewController.h" #define angle2Rad(angle) ((angle) / 180.0 * M_PI) @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //

iOS开发-核心动画随笔

核心动画可以让View旋转,缩放,平移(主要是操作View的layer(层)属性)但是核心动画改变的位置不是真实的位置,一切都是假象所以有时候要用到其他动画,如UIView本来封装的动画,还有定时器 // 实现图片360°旋转 CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationA

ios开发核心动画七:核心动画与UIView动画的区别

/** UIView与核心动画区别?(掌握) 1.核心动画只作用在layer. 2.核心动画看到的都是假像,它并没有去修改UIView的真实位置. 什么时候使用核心动画? 1.当不需要与用户进行交互,使用核心动画 2.当要根据路径做动画时,使用核心动画:CABasicAnimation,CAKeyFrameAnimation,两个都可以根据绘制的路径UIBizerPath来绘制路径来执行动画 3.当做转场动画时, 使用核心动画 (核心动画转场类型比较多)CATrasition或是UIView的核

iOS开发核心动画之动画

一. 核心动画简述 1. Core Animation是直接作用在CALayer上的,并非UIView,因此核心动画的本质是修改图层的某个属性 2. 核心动画继承结构 3. transform的相关属性 二. 核心动画 基础动画 : CABaseicAnimation 帧动画 : CAKeyframeAnimation 组动画 : CAAnimationGroup 转场动画 : CATransition 1. 基础动画(CABaseicAnimation) 1> 创建动画 CABasicAnim

ios开发核心动画三:隐式动画与时钟效果

一:隐式动画 #import "ViewController.h" @interface ViewController () /** <#注释#> */ @property (nonatomic, weak) CALayer *layer; @property (weak, nonatomic) IBOutlet UIView *redView; @end @implementation ViewController - (void)viewDidLoad { [super

IOS开发核心动画六:动画组

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *redView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typic