博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pop–实现任意iOS对象的任意属性的动态变化
阅读量:5957 次
发布时间:2019-06-19

本文共 5409 字,大约阅读时间需要 18 分钟。

pop

简介

Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型.

  • 项目主页:

  • 最新示例:

  • 注意: 官方代码中,并不包含实例,而是用于编译的所有源代码,建议自行新建工程,并结合下文的代码片段查看效果.

入门

安装

通过CocoaPods安装

pod 'pop', '~> 1.0'

使用

在需要使用POP的地方,引入头文件:

#import 

动画的开始,停止 与 更新

把动画添加到你想要拥有动态变化的对象上面,即可开始动画:

POPSpringAnimation *anim = [POPSpringAnimation animation];...[layer pop_addAnimation:anim forKey:@"myKey"];

可以根据开始动画时传入的键,来移除对应的动画:

[layer pop_removeAnimationForKey:@"myKey"];

开始动画时传入的键,也可以用来查询是否存在某个动画.更新一个正在执行的动画的 toValue,可以无缝实现动画效果间的过渡:

anim = [layer pop_animationForKey:@"myKey"];if (anim) {  /* 更新toValue为一个新值. */  anim.toValue = @(42.0);} else {  /* 创建并开始一个新的动画. */  ....}

上面的例子是以图层为例.Pop是以NSObject的扩展方式实现的.也就是说: 任何NSObject及其子类都可以通过Pop添加动画效果.

动画类型

有四种动画类型: 弹性动画,渐弱动画,基础动画和自定义动画.

弹性动画

弹性动画,可以给对象一个有活力的弹跳效果.下面的例子中,我们使用弹性动画来使图层的边框值从它的当前值变化为(0, 0 ,400, 400):

POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)];[layer pop_addAnimation:anim forKey:@"size"];

渐变动画

渐变动画,可以让对象缓慢地停止变化.下面的例子,我们使图层的横坐标从当前值以1000像素每秒的速度渐变:

POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];anim.velocity = @(1000.);[layer pop_addAnimation:anim forKey:@"slide"];

基础动画

基础动画可以用来在指定的时间段动态改变属性的值.在默认的时间周期内动态让视图的透明度从0.0变化到1.0来实现淡入的效果:

POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];anim.fromValue = @(0.0);anim.toValue = @(1.0);[view pop_addAnimation:anim forKey:@"fade"];

自定义动画

POPCustomAnimation 用来创建自定义动画和过渡效果.它通过管理 CADisplayLink 来管理时间与动画的关联性.更多细节,详见头文件.

动画属性

动画属性由POPAnimatableProperty类管理,用来指定在哪个属性上应用动画效果.在下面的例子中,我们创建了一个弹性动画,并且显示设置动画属性为与-[CALayer bounds]对应的属性:

POPSpringAnimation *anim = [POPSpringAnimation animation];anim.property = [POPAnimatableProperty propertyWithName:kPOPLayerBounds];

这个框架爱预先实现了了许多图层和视图共用的动画属性,你可以在自己的项目中直接使用.你也可以通过创建POPAnimatableProperty类的实例,来创建一个自定义的动画属性.下面的例子中,我们定义了一个自定义的volume动画属性:

prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) {  // 读取动画属性的值  prop.readBlock = ^(id obj, CGFloat values[]) {    values[0] = [obj volume];  };  // 设置动画属性的值.  prop.writeBlock = ^(id obj, const CGFloat values[]) {    [obj setVolume:values[0]];  };  // 力学上的临界值  prop.threshold = 0.01;}];anim.property = prop;

系统预定义的动画属性也是由上面例子的机制定义的,自定义动画属性时,很有借鉴价值.完整的预定义的动画属性列表和他们实现的具体细节参见POPAnimatableProperty.h:

/** 图层(CALayer)通用动画属性. */extern NSString * const kPOPLayerBackgroundColor;extern NSString * const kPOPLayerBounds;extern NSString * const kPOPLayerCornerRadius;extern NSString * const kPOPLayerBorderWidth;extern NSString * const kPOPLayerBorderColor;extern NSString * const kPOPLayerOpacity;extern NSString * const kPOPLayerPosition;extern NSString * const kPOPLayerPositionX;extern NSString * const kPOPLayerPositionY;extern NSString * const kPOPLayerRotation;extern NSString * const kPOPLayerRotationX;extern NSString * const kPOPLayerRotationY;extern NSString * const kPOPLayerScaleX;extern NSString * const kPOPLayerScaleXY;extern NSString * const kPOPLayerScaleY;extern NSString * const kPOPLayerSize;extern NSString * const kPOPLayerSubscaleXY;extern NSString * const kPOPLayerSubtranslationX;extern NSString * const kPOPLayerSubtranslationXY;extern NSString * const kPOPLayerSubtranslationY;extern NSString * const kPOPLayerSubtranslationZ;extern NSString * const kPOPLayerTranslationX;extern NSString * const kPOPLayerTranslationXY;extern NSString * const kPOPLayerTranslationY;extern NSString * const kPOPLayerTranslationZ;extern NSString * const kPOPLayerZPosition;extern NSString * const kPOPLayerShadowColor;extern NSString * const kPOPLayerShadowOffset;extern NSString * const kPOPLayerShadowOpacity;extern NSString * const kPOPLayerShadowRadius;/** 图形层(CAShapeLayer)通用动画属性.  */extern NSString * const kPOPShapeLayerStrokeStart;extern NSString * const kPOPShapeLayerStrokeEnd;extern NSString * const kPOPShapeLayerStrokeColor;extern NSString * const kPOPShapeLayerFillColor;/** 视图约束(NSLayoutConstraint)通用动画属性.  */extern NSString * const kPOPLayoutConstraintConstant;/** 视图(UIView)通用动画属性. */extern NSString * const kPOPViewAlpha;extern NSString * const kPOPViewBackgroundColor;extern NSString * const kPOPViewBounds;extern NSString * const kPOPViewCenter;extern NSString * const kPOPViewFrame;extern NSString * const kPOPViewScaleX;extern NSString * const kPOPViewScaleXY;extern NSString * const kPOPViewScaleY;extern NSString * const kPOPViewSize;extern NSString * const kPOPViewTintColor;/** 滚动视图(UIScrollView)通用动画属性. */extern NSString * const kPOPScrollViewContentOffset;extern NSString * const kPOPScrollViewContentSize;extern NSString * const kPOPScrollViewZoomScale;extern NSString * const kPOPScrollViewContentInset;/** 列表(UITableView)通用动画属性. */extern NSString * const kPOPTableViewContentOffset;extern NSString * const kPOPTableViewContentSize;/** 集合视图(UICollectionView)通用动画属性. */extern NSString * const kPOPCollectionViewContentOffset;extern NSString * const kPOPCollectionViewContentSize;/** 导航栏(UINavigationBar)通用动画属性. */extern NSString * const kPOPNavigationBarBarTintColor;/** 工具栏(UIToolBar)通用动画属性. */extern NSString * const kPOPToolbarBarTintColor;/** 标签栏(UITabBar)通用动画属性. */extern NSString * const kPOPTabBarBarTintColor;/** 标签(UILabel)通用动画属性. */extern NSString * const kPOPLabelTextColor;

转载地址:http://enrxx.baihongyu.com/

你可能感兴趣的文章
oracle 多个分组函数,oracle之4多行函数之分组函数
查看>>
禅道怎么连接oracle数据库,禅道项目管理系统整合Selenium IDE的思路
查看>>
linux 禁止文件修改时间,linux 修改文件的时间属性
查看>>
x86 linux 根文件系统6,Linux系列六之根文件系统
查看>>
linux下运行brew,安装 Linuxbrew(示例代码)
查看>>
linux下svn安装教程,linux下安装svn的方法
查看>>
linux 删除不需要的软件,怎么查找并删除不常用的软件包呢?
查看>>
linux图形界面sdk,Linux SDK入门指南
查看>>
linux 修改proc目录,Linux_Linux中系统参数修改命令sysctl的使用讲解,sysctl配置与显示在/proc/sys目录 - phpStudy...
查看>>
linux自启动的无关服务,linux 自启动服务 · Nankle
查看>>
telnet linux root登录,CentOS允许telnet通过root用户进行访问
查看>>
linux下yum安装zabbix,yum安装zabbix4.2
查看>>
Linux下qt注册表,解析 Qt 4.7.0 SDK for Windows 安装后注册表中选项
查看>>
国际学院c语言作业,C语言程序的国际化
查看>>
四阶龙格库塔法c语言程序,四阶龙格库塔法C语言(西安交大)
查看>>
c语言中无windows函数库,关于C语言, GCC/MSVC中,如何写出一个真正意义上的不依赖库的程序?...
查看>>
c语言中break可以用在swift,我可以在Swift中的if语句中使用范围运算符吗?
查看>>
c语言期末考试题库大题及详解答案,C语言期末复习题答案.doc
查看>>
欧洲语言框架A1到C2,法语等级 A1、A2、B1、B2、C1、C2
查看>>
c语言中以追加只写方式打开文本文件,C语言中打开文件读取,写入的操作
查看>>