POP动画引擎中Layer与CALayer的一点区别
POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步:
https://github.com/facebook/pop
下面简单的讲一下POP动画引擎中Layer与CALayer的区别:
这里, 代码做的都是同一个效果: 执行位移动画3秒, 然后在1秒后移除所有动画
使用POP效果图:
使用CALayer效果图:
可以看到, POP执行的动画当动画被移除之后, 被执行对象保留了被停止时的状态
而CALayer执行的动画当动画被移除之后, 跳到了另外一个状态, 这是因为CALayer添加的
CABasicAnimation动画会另外生成一个图层来执行动画, 而CALayer本身早已经是动画结束后状态, 当动画结束后就会显示出来,
所以就会出现, 当动画执行到一半被移除的时候, 就会出现跳动的现象..
这也就是这两者之间的一点区别..
以下是代码:
#import "ViewController.h"
#import <POP.h> @interface ViewController () // 测试CALayer
@property (nonatomic, strong) CALayer *normalLayer;
// 用于测试POP的Layer
@property (nonatomic, strong) CALayer *popLayer; @end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{ [self setupNormalLayer]; // 一秒后移除所有动画
[self performSelector:@selector(stopAnimation) withObject:nil afterDelay:.f];
} - (void)setupPopLayer
{
// 初始化
self.popLayer = [CALayer layer];
self.popLayer.frame = CGRectMake(, , , );
self.popLayer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:self.popLayer];
// 添加POP动画
POPBasicAnimation *basicAnimation = [POPBasicAnimation animationWithPropertyNamed:@"position"];
basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.popLayer.position.x, )];
basicAnimation.duration = .f;
[self.popLayer pop_addAnimation:basicAnimation forKey:nil];
} - (void)setupNormalLayer
{
// 初始化
self.normalLayer = [CALayer layer];
self.normalLayer.frame = CGRectMake(, , , );
self.normalLayer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:self.normalLayer];
// 添加动画
CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(self.normalLayer.position.x, self.normalLayer.position.y)];
basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(self.normalLayer.position.x, )];
basicAnimation.duration = .f;
[self.normalLayer addAnimation:basicAnimation forKey:nil]; self.normalLayer.position = CGPointMake(self.normalLayer.position.x, );
} - (void)stopAnimation
{
[self.normalLayer removeAllAnimations];
// [self.popLayer pop_removeAllAnimations];
} @end
POP动画引擎中Layer与CALayer的一点区别的更多相关文章
- 用POP动画引擎实现弹簧动画(POPSpringAnimation)
效果图: #import "ViewController.h" #import <POP.h> @interface ViewController () @proper ...
- 用POP动画引擎实现衰减动画(POPDecayAnimation)
效果图: #import "ViewController.h" #import <POP.h> @interface ViewController () @end @i ...
- Xcode7.3.1中通过最新的CocoaPod安装pop动画引擎
CocoaPod是一个用ruby实现,用于方便的管理Xcode中第三方插件的管理器.用它我们可以很方便的安装和升级插件而不用担心破坏原有的项目. 而pop是一个用于实现App中动画的引擎,它是由Fac ...
- 谈谈你对 mysql 引擎中的 MyISAM与InnoDB的区别理解?
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISA ...
- [译]理解 Windows UI 动画引擎
本文译自 Nick Waggoner 的 "Understand what’s possible with the Windows UI Animation Engine",已获原 ...
- 聊聊动画引擎 pop
iOS可以通过CADisplayLink实现自定义动画引擎,pop就是基于此实现的,而且比原生Core Animation更强大好用.譬如当ViewController侧滑返回的时候,系统会将Core ...
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)
也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生,那么这真是一篇好文章(当然我仅仅是翻译了一下) 动画脚本 Anim ...
- iOS动画——弹窗动画(pop动画)
用pop动画简单实现弹窗的缩放和渐变,感觉这个动画常用,就写一下博客 pop动画是Facebook推出的动画引擎,请自行到GitHub上搜索下载拖拽导入xcode项目中. 更多pop动画使用和原理可网 ...
- POP动画[1]
POP动画[1] pop动画是facebook扩展CoreAnimation的,使用及其方便:) 1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCorner ...
随机推荐
- linux c数据库备份第四版
该版本算是比较成熟的啦,欢迎大伙拿来试用!!!1.新增数据库连接和备份时间配置文件conf2.新增日志文件,程序运行的一些异常会记录在log文件下 后续的工作:1.将代码切割为多个文件,分类存放代码2 ...
- Lua:简单入门
首先,感谢 runoob.com:http://www.runoob.com/lua/lua-tutorial.html 直接用 SciTE 进行文本编辑,F5调试,非常方便. 注意点: 1. 变量的 ...
- C++ Primer chap7
/* 第七章7.1: */ //#include<iostream> //#include<string> //using std::cin; //using std::cou ...
- linux下的工具总结
1. 编译阶段 gcc: -Wall -Werror -O2 make nm: nm -C a.o c++filt strip objdump readelf 2. 链接 ldd: ldd ./a.o ...
- angular-utils-pagination 使用案例
angular-utils-pagination是基于angular,bootstrap,jquery的一个分页插件,详细介绍以及使用方法参照: Git:https://github.com/mich ...
- Chrome extension
PageSpeed Tincr SpriteMe JSONView FireMobileSimulator for Google Chrome™
- Codec plugins ? multiline
Codec plugins ? multiline multiline codec 会折叠多行消息,合并它们到一个事件 这个codec 原始的目的是允许 连接多行信息从文件到一个单独的事件. 比如, ...
- H - Can you answer these queries? - (区间查询更新)
有一列数,(都是2^63范围内的并且都大于0的整数),现在呢有一些操作, 操作 0 可以把区间LR内的所有数都变成它的平方根数(是取整后的),操作 1 可以就是求区间LR内的和了. 分析:因为这个操作 ...
- css文本超出2行就隐藏并显示省略号
之前在网上看到过这样的代码,感觉有的时候还是挺有用的,故留个笔记. display:-webkit-box; //将对象作为弹性伸缩盒子模型显示. -webkit-box-orient:vertica ...
- Jquery 的bind(), live(), delegate(), on()绑定事件方式
1. 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅. bind() 适 ...