属性动画 - CAAnimationDelegate

简介: 属性动画 - CAAnimationDelegate

CAAnimationDelegate从名字就可以看出这是一个动画的代理,里面有什么方法呢?其中最主要的就是一个动画结束之后的代理方法:-animationDidStop:finished:,这个方法在动画结束之后用来更新图层,CAAnimationDelegate在任何头文件中都找不到,但是可以在CAAnimation的头文件中找到相关函数。


来说下它的使用方法,举个简单例子,以前面博客中改变图层颜色为例,点击按钮改变图层颜色:

- (IBAction)changeColor
  {
//create a new random color
CGFloat red = arc4random() / (CGFloat)INT_MAX;
CGFloat green = arc4random() / (CGFloat)INT_MAX;
CGFloat blue = arc4random() / (CGFloat)INT_MAX;
UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1.0]; 
//create a basic animation
CABasicAnimation *animation = [CABasicAnimation animation]; 
animation.keyPath = @"backgroundColor";
animation.toValue = (__bridge id)color.CGColor;
animation.delegate = self;
//apply animation to layer
[self.colorLayer addAnimation:animation forKey:nil];
}
- (void)animationDidStop:(CABasicAnimation *)anim finished:(BOOL)flag {
//set the backgroundColor property to match animation toValue 
[CATransaction begin];
//设置动画变化过程是否显示,默认YES,不显示
[CATransaction setDisableActions:YES]; self.colorLayer.backgroundColor = (__bridge CGColorRef)anim.toValue; 
[CATransaction commit];
}

如果有多个动画,怎么来判断哪个是哪个呢?好在CAAnimation实现了KVC,可以通过设置的键值的方法来拿到不同的动画:

CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"transform";
animation.toValue = [NSValue valueWithCATransform3D:transform];
animation.duration = 0.5;
animation.delegate = self;
//设置键值,可随意设置
[animation setValue:handView forKey:@"handView"];
[handView.layer addAnimation:animation forKey:nil];
//获取到执行了该动画的对象view
UIView *handView = [anim valueForKey:@"handView"];


目录
相关文章
|
API Android开发
Android动画——属性动画
在属性动画中,常用到的API有ValueAnimator,ObjectAnimator。 ValueAnimator:时间引擎,负责计算各个帧的属性值,基本上其他属性动画都会直接或间接继承它; ObjectAnimator: ValueAnimator 的子类,对指定对象的属性执行动画。
152 0
|
XML Java Android开发
Android动画 补间动画
补间动画:属于Android中View动画的一种,就是涵盖了 平移、缩放、旋转 和 透明度四种变化的动画。实现方式有两种:xml文件 和 java代码。 四种补间动画分别为RotateAnimation、ScaleAnimation、TranslateAnimation、AlphaAnimation,他们的父类为Animation。
|
XML Web App开发 编解码
Android动画之帧动画
在Android开发时,为了实现一些动态的炫酷的效果,我们常用到帧动画,View动画(补间动画)和属性动画,今天就来总结下我在使用帧动画的实现方式。
|
Android开发 内存技术
Android动画(帧动画、补间动画、属性动画)讲解
帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同时移动、缩放、旋转和淡入淡出的效果也不再只是一种视觉上的动画效果了。所以从Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation)。
324 0
Android动画(帧动画、补间动画、属性动画)讲解
RecyclerView 添加动画
RecyclerView 添加动画
189 0
|
Android开发 Java 数据格式
Android 基础动画之属性动画详解
在上两篇文章主要介绍了 Android 基础动画之帧动画 以及 Android 基础动画之补间动画 。本篇文章主要介绍的是Android基础动画之 属性动画 。
1127 0
|
XML Android开发 数据格式
Android动画之补间动画详解
一.概念 补间动画是指开发者无需定义动画过程中的每一帧,只需要定义动画的开始和结束两个关键帧,并指定动画变化的时间和方式等,然后交由Android系统进行计算,通过在这两个关键帧之间插入渐变值来实现平滑过渡,从而对View的内容完成一系列的图形变换来实现动画效果,主要包括四种基本效果:透明变化Alpha、大小变化Scale、位移变化Translate、以及旋转变化Route,这四种效果可以动态组合,从而实现复杂灵活的动画。
1243 0
|
XML Android开发 数据格式
Android动画之帧动画详解
一.概念 帧动画也叫Drawable Animation,是最简单最直观的动画类型,他利用人眼的视觉暂留效应——也就是光对视网膜所产生的视觉在光停止作用后,仍会保留一段时间的现象。
894 0
|
XML Android开发 数据格式
动画必须有(一): 属性动画浅谈
目录 前言 ObjectAnimator的初步使用 用AnimatorSet进行动画混合 将动画写在xml中 动画监听 ViewPropertyAnimator上手 最后 前言 官方文档传送门 属性动画是非常非常好用的, 谷歌自己都说这是一个强大的框架.
1220 0