博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POP动画[3]
阅读量:6211 次
发布时间:2019-06-21

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

POP动画[3]

这一节主要讲解POP动画的自定义动画属性.

POP动画中有一个参数,叫timingFunction,与CoreAnimation中的一个参数CAMediaTimingFunction基本一样,下图表示的是kCAMediaTimingFunctionEaseInEaseOut的曲线图.

下图是Spring动画效果:

我们可以使用自定义的属性来实现POP的库中没有提供的动画.

实现的效果:

源码:

////  RootViewController.m//  YXPOP////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootViewController.h"#import "POP.h"@interface RootViewController ()@end@implementation RootViewController- (void)viewDidLoad{    [super viewDidLoad];    self.view.backgroundColor   = [UIColor blackColor];        // 数值型label    UILabel *numberLabel        = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];    numberLabel.center                 = self.view.center;    numberLabel.userInteractionEnabled = YES;    numberLabel.textAlignment          = NSTextAlignmentCenter;    numberLabel.textColor       = [UIColor redColor];    numberLabel.text            = @"0";    numberLabel.font            = [UIFont fontWithName:@"HelveticaNeue-UltraLight"                                                  size:50.f];    [self.view addSubview:numberLabel];        // 添加手势    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self                                                                          action:@selector(tap:)];    [numberLabel addGestureRecognizer:tap];}- (void)tap:(UITapGestureRecognizer *)tap{    UILabel *tmp                  = (UILabel *)tap.view;    POPBasicAnimation *animation  = [POPBasicAnimation animation];    animation.fromValue           = @([tmp.text intValue]);    animation.toValue             = @(arc4random()%10000 + 2000);    animation.duration            = 1.f;        // 计算从fromValue到toValue插值的曲线    animation.timingFunction      = \        [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];    // 将计算出来的值通过writeBlock动态给控件设定    animation.property            = \        [POPMutableAnimatableProperty propertyWithName:@"textLabel" initializer:^(POPMutableAnimatableProperty *prop) {         prop.writeBlock      = ^(id obj, const CGFloat values[]) {             UILabel *label   = (UILabel *)obj;             NSNumber *number = @(values[0]);             int num          = [number intValue];             label.text       = [@(num) stringValue];         };     }];            [tmp pop_addAnimation:animation forKey:@"numberLabelAnimation"];}@end

他们彼此间凌乱的关系如下所示:

duration代表x轴(时间轴)

fromValue与toValue代表y轴的最小值与最大值

timingFunction代表时间曲线(EaseOut曲线)

曲线中的每一个小点代表的是根据上述各个值计算出来的一个中间值,而这个中间值就是我们用来做动画而用的动画设定值.

以下网址是介绍如何设定CAMediaTimingFunction的(http://netcetera.org/camtf-playground.html).

 

 

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

你可能感兴趣的文章
用C读取json文件
查看>>
IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构
查看>>
在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action...
查看>>
二叉树的建树,按层遍历,结点总数,页结点,深度以及三序非递归遍历二叉树,建立中序线索二叉树...
查看>>
Linux 内核动态函数调用可视化工具
查看>>
MySQL性能优化
查看>>
log4cplus使用
查看>>
正确的使用枚举(Enum)
查看>>
Web API应用架构设计分析(1)
查看>>
Java时间操作(一):关于UTC格式时间处理
查看>>
威佐夫博弈模板
查看>>
mysql show variables系统变量详解
查看>>
JAVASCRIPT中的THIS指向问题
查看>>
c语言中使用宏,需要注意的的几点
查看>>
公钥,私钥和数字签名这样最好理解
查看>>
void与void*详解
查看>>
C++ 类的静态成员及静态成员函数
查看>>
DirectStream、Stream的区别-SparkStreaming源码分析02
查看>>
SVM相关知识及和softmax区别
查看>>
SOAP(简单对象访问协议)
查看>>