核心动画的接触点滴(三)-创新互联
本篇记录的是核心动画的中的CApropertyAnimation中的关键帧动画部分。非常有用:
创新互联是一家专业提供绥滨企业网站建设,专注与网站建设、成都网站设计、H5开发、小程序制作等业务。10年已为绥滨众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。关键帧动画是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值
属性解析:
values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略
keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的说明:CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation
第一种使用方法:
//view()
voidUIView
创建核心动画帧动画
CAKeyframeAnimation *keyAnima=[CAKeyframeAnimation animation];
//使用平移的方式//平移
keyAnima.keyPath=@"position";
//告诉系统要执行什么动画
NSValue *value1=[NSValue valueWithCGPoint:CGPointMake(100, 100)];
NSValue *value2=[NSValue valueWithCGPoint:CGPointMake(200, 100)];
NSValue *value3=[NSValue valueWithCGPoint:CGPointMake(200, 200)];
NSValue *value4=[NSValue valueWithCGPoint:CGPointMake(100, 200)];
NSValue *value5=[NSValue valueWithCGPoint:CGPointMake(100, 100)];
//加入帧动画数组
keyAnima.values=@[value1,value2,value3,value4,value5];
//设置动画执行完毕后,不删除动画
keyAnima.removedOnCompletion=NO;
//设置保存动画的最新状态
keyAnima.fillMode=kCAFillModeForwards;
//设置动画执行的时间
keyAnima.duration=1.0;
//设置动画的节奏(开始和结束时的快慢)
keyAnima.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//设置代理,开始—结束
[view.layer addAnimation:keyAnima forKey:nil];
可以看得出来,这个和之前的基本动画里的平移动画类似,只不过它的value变成了一个数组了,其中设置的动画的执行节奏有如下几种:(可以自己去尝试)
kCAMediaTimingFunctionEaseIn
kCAMediaTimingFunctionEaseOut
kCAMediaTimingFunctionEaseInEaseOut
kCAMediaTimingFunctionDefault
第二种方法(使用path),让layer在指定的路径上移动
-(void)addKeyFrameAnimationOnView2:(UIView *)view
{
CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];
keyAnima.keyPath = @"position";
keyAnima.duration = 1.0f;
//创建一条路径
CGMutablePathRef path = CGPathCreateMutable();
//设置一个圆的路径
CGPathAddEllipseInRect(path, NULL, CGRectMake(Width/2, Height/2+100, 50, 50));
keyAnima.path = path; //记得一定要设置
//release
CGPathRelease(path);
//取消执行完后移除动画
keyAnima.removedOnCompletion = NO;
//设置保存动画的最新状态
keyAnima.fillMode = kCAFillModeForwards;
//设置动画的节奏(这里选择渐入渐出)
keyAnima.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[view.layer addAnimation:keyAnima forKey:nil];
停止动画调用方法: removeAnimationForKey:即可(前提是要知道需要停止的动画之前被赋予的key,才能匹配并停止)
视图的抖动:
//
180.0//获取自定义弧度
{
CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];
keyAnima.keyPath = @"transform.rotation";
keyAnima.duration = 0.1f;
//设置视图的抖动弧度(其实还是帧动画)
CGFloat angel = 5.0;
keyAnima.values=@[@(-angle2Radian(angel)),@(angle2Radian(angel)),@(-angle2Radian(angel))];
keyAnima.removedOnCompletion = YES;
keyAnima.repeatCount = 2;
keyAnima.fillMode = kCAFillModeForwards;
[view.layer addAnimation:keyAnima forKey:nil];
}
写法跟帧动画没有太大区别,只是要设置一下重复的次数和完成后移除动画
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站名称:核心动画的接触点滴(三)-创新互联
标题来源:http://myzitong.com/article/dogcgs.html