最近Github有一个上很火的开源动画集叫Animations。

我也很喜欢做动画动效,特来学习观摩。因为动效的特殊性,很多情况下这个项目里的动效不能直接Copy到我们现有的项目中直接使用,所以搞清楚她们的实现原理就很有必要了。建议配合源码学习。

POP按钮动画

效果如下

思路 整体效果是用三个CAShapeLayer和一个UILabel组合实现的。CAShapeLayer负责绘制两个圆的边和一个实心圆。动画用POP的POPBasicAnimation和POPSpringAnimation。

你的肉眼能看出哪里用得哪种动画么?实心圆的尺寸变化、和空心圆的绘制进度是POPBasicAnimation实现的,基本是一个线性动画,匀速。实心圆的颜色改变用的是POPSpringAnimation弹簧动画。

关于CAShapeLayer

CAShapeLayer是一中特殊的CALayer用于绘制图形,可以理解成是CoreGraphic的一种对象化封装。一个CAShapeLayer可以绘制一个简单图形。例如例子里的圆

UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.lineWidth + self.radius, self.lineWidth + self.radius)

radius:self.radius + self.lineWidth / 2.f

startAngle:self.startAngle

endAngle:self.endAngle

clockwise:self.clockWise];

shapeLayer.path = path.CGPath;

bezierPathWithArcCenter这个方法中传入一系列参数,绘制了一条贝塞尔(bezier)曲线,参数分别是中心点、半径、开始角度、终止角度,是否闭环。

POP文字动画

POP实现的文字动画,例子里用的同样是POPBasicAnimation,所以也是线性变化的。

- (void)pop_animationDidApply:(POPAnimation *)anim {

NSLog(@"pop_animationDidApply %@", anim);

NSValue *toValue = (NSValue *)[anim valueForKeyPath:@"currentValue"];

CGSize size = [toValue CGSizeValue];

[CATransaction setDisableActions:YES];

CGFloat percent = (size.height - _math.b) / _math.k;

_circleShape1.strokeEnd = percent;

_circleShape2.strokeEnd = percent;

[CATransaction setDisableActions:NO];

UIColor *color = [UIColor colorWithRed:percent green:percent blue:percent alpha:1.f];

double showValue = fabs(percent * 100);

self.label.text = [NSString stringWithFormat:@"%.f%%", showValue];

self.label.textColor = color;

_blurImageView.alpha = 1 - percent;

}

解释,这个POP动画的分帧回调,回调中用

NSValue *toValue = (NSValue *)[anim valueForKeyPath:@"currentValue"];

取得当前动画的值,这个动画实际只是改变了实心圆的尺寸。然后开发者通过当前尺寸计算出动画的进度

CGFloat percent = (size.height - _math.b) / _math.k;

CATransaction动画开关,禁用了两个外边圆的strokeEnd隐式动画。

[CATransaction setDisableActions:YES];

如果你不明白CALayer的显式动画和隐式动画的区别,请仿照CALayer的隐式动画和显式动画写一个Demo对比一下。有更多问题可以在下面留言。

响应链

Target模式,很容易理解。

// 按住按钮后没有松手的动画

[_button addTarget:self action:@selector(scaleToSmall) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragEnter];

// 按住按钮松手后的动画

[_button addTarget:self action:@selector(scaleAnimations) forControlEvents:UIControlEventTouchUpInside];

// 按住按钮后拖拽出去的动画

[_button addTarget:self action:@selector(scaleToDefault) forControlEvents:UIControlEventTouchDragExit];

高斯模糊

高斯模糊(blur)的实现有很多方式,这个源码里使用的UIImage+ImageEffects是一个 UIImage的扩展。

动画效果通过用blur层覆盖在普通层上,通过修改blur层alpha值实现。

java动效_Animations开源动效分析(一)POP按钮动画相关推荐

  1. 鼠标动效html,5种纯CSS3鼠标hover按钮动画效果

    这是一款鼠标hover按钮动画特效.该特效共有5种hover动画效果,它们在结构布局上使用flex来进行布局,并通过css transition来实现动画效果. 使用方法 HTML结构 该按钮特效使用 ...

  2. 前端必看!微信都在用的开源动效方案【PAG动效】

    1.PAG 是什么? 在 web 中实现一个动画, css animation 声明一下各个时间点的样式就好了, 写起来并不麻烦.但是当设计给的动画越来越复杂, 还原度要求越来越高的情况下, 单纯依赖 ...

  3. 网易互娱动效设计师 | VX动效学习如何入门?

    在上篇<游戏动效与美术特效的区别>文章中,学院君给大家介绍了VX是什么.今天又给大家带来一篇VX动效入门干货文章,主要从哪里学,怎么做,如何深入等三个方面,系统讲下VX动效学习如何入门. ...

  4. AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

    原文 Airbnb 发布的 Lottie 是一个面向 iOS.Android 和 React Native 的开源动画库. 简单来说,就是可以直接利用 AE 导出的 JSON 动画文件,将其解析为原生 ...

  5. 开源工具高效分析Java应用

    开源工具高效分析Java应用 不止一次,我们都萌发过想对运行中程序的底层状况一探究竟的念头.产生这种需求的原因可能是运行缓慢的服务.Java虚拟机(JVM)崩溃.挂起.死锁.频繁的JVM暂停.突然或持 ...

  6. android动画帧率_Android动画进阶—使用开源动画库nineoldandroids

    前言 Android系统支持原生动画,这为应用开发者开发绚丽的界面提供了极大的方便,有时候动画是很必要的,当你想做一个滑动的特效的时候,如果苦思冥想都搞不定,那么你可以考虑下动画,说不定动画轻易就搞定 ...

  7. Facebook开源动画库 POP-POPBasicAnimation运用

    动画在APP开发过程中还是经常出现,将花几天的时间对Facebook开源动画库 POP进行简单的学习:本文主要针对的是POPBasicAnimation运用:实例源代码已经上传至gitHub,地址:h ...

  8. Java三大主流开源工作流引擎分析

    Java三大主流开源工作流引擎分析 首先,这个评论是我从网上,书中,搜索和整理出来的,也许有技术点上的错误点,也许理解没那么深入.但是我是秉着学习的态度加以评论,学习,希望对大家有用,进入正题! 三大 ...

  9. java基于ssm的卡通动漫网站

    本系统设计为卡通动漫网站系统管理,主要功能是前台展示网站新闻信息,具有分类展示功能及在线留言和对文章的在线评论等功能,网站用户的注册,系统简介等.管理员后台的管理,管理员登录后台后可对现有管理员进行增 ...

最新文章

  1. 实战Jenkins+SVN+tomcat持续集成发布
  2. Python apply函数
  3. MySQL清理注册表
  4. Android Wifi简单的梳理【转】
  5. 单片微型计算机系统应用和开发特点,单片微机原理与应用(第2版)
  6. php 生成器作用,php 生成器的理解和使用
  7. 论文学习14-End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures(端到端实体关系抽取)
  8. 开放源代码_您是否在开放源代码中看到了这些个性?
  9. 模块化日常:开源库与私有库重名
  10. 数学建模入门篇(新手必看)
  11. Android人脸识别活体检测开发入门--基于虹软免费SDK实现
  12. 如何评价单片机大神郭天祥?
  13. 前Sun高级经理蒋清野:从JavaEye社区被迫改名说起
  14. mysql error 1236_【MySQL】Got fatal error 1236原因和解决方法
  15. 基于有道翻译的英翻中微信小程序
  16. 【规划】Motion Planning Approaches 路径规划方法汇总
  17. 关于SQL数据表存储过程表名前缀换成dbo代码
  18. 学会Python就能做游戏脚本开发?别天真了!
  19. 对面工位小老弟,你做的测试我服气!
  20. 数据库之postgreSql时间计算,例如获取前一天、后一天等。

热门文章

  1. laravel 事务_【钢结构建筑】gmp建筑师事务所 | 杭州铁路南站
  2. 发布半年之后,QQ 物联做得到底怎么样了?
  3. 按防电击类型分类的II设备(无保护接地线缆)可免于线对地的浪涌实验
  4. 基于Arduino控制的网格循迹小车
  5. 利用网络信息减少因果推断中的confounding bias--结合两种思路的新方法
  6. 游戏建模师日常工作内容包括哪些?
  7. python生成不对称正弦波与傅里叶级数分解
  8. 云场景实践研究第83期:众安保险
  9. C语言适合什么开发,1.1.3 C语言适合什么开发
  10. Android系国产手机操作系统汇总