动画—Core Animation初步学习四:动画组,一系列动画的组合,能构建出复杂的动画效果

来源:互联网 发布:数据不可信的 英文 编辑:程序博客网 时间:2024/05/18 02:53

     在此贴上我学习的博客

     http://www.cnblogs.com/kenshincui/p/3972100.html#autoid-3-2-0

   动画组

实际开发中一个物体的运动往往是复合运动,单一属性的运动情况比较少,但恰恰属性动画每次进行动画设置时一次只能设置一个属性进行动画控制(不管是基础动画还是关键帧动画都是如此),这样一来要做一个复合运动的动画就必须创建多个属性动画进行组合。对于一两种动画的组合或许处理起来还比较容易,但是对于更多动画的组合控制往往会变得很麻烦,动画组的产生就是基于这样一种情况而产生的。动画组是一系列动画的组合,凡是添加到动画组中的动画都受控于动画组,这样一来各类动画公共的行为就可以统一进行控制而不必单独设置,而且放到动画组中的各个动画可以并发执行,共同构建出复杂的动画效果。

动画组使用起来并不复杂,首先单独创建单个动画(可以是基础动画也可以是关键帧动画),然后将基础动画添加到动画组,最后将动画组添加到图层即可。

前面关键帧动画部分,路径动画看起来效果虽然很流畅,但是落花本身的旋转运动没有了,这里不妨将基础动画部分的旋转动画和路径关键帧动画进行组合使得整个动画看起来更加的和谐、顺畅。

////  动画组//  Animation////  Created by Kenshin Cui on 14-3-22.//  Copyright (c) 2014年 Kenshin Cui. All rights reserved.//#import "KCMainViewController.h"@interface KCMainViewController (){    CALayer *_layer;}@end@implementation KCMainViewController- (void)viewDidLoad {    [super viewDidLoad];        //设置背景(注意这个图片其实在根图层)    UIImage *backgroundImage=[UIImage imageNamed:@"background.jpg"];    self.view.backgroundColor=[UIColor colorWithPatternImage:backgroundImage];        //自定义一个图层    _layer=[[CALayer alloc]init];    _layer.bounds=CGRectMake(0, 0, 10, 20);    _layer.position=CGPointMake(50, 150);    _layer.contents=(id)[UIImage imageNamed:@"petal.png"].CGImage;    [self.view.layer addSublayer:_layer];        //创建动画    [self groupAnimation];}#pragma mark 基础旋转动画-(CABasicAnimation *)rotationAnimation{    CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];    CGFloat toValue=M_PI_2*3;    basicAnimation.toValue=[NSNumber numberWithFloat:M_PI_2*3];//    basicAnimation.duration=6.0;    basicAnimation.autoreverses=true;    basicAnimation.repeatCount=HUGE_VALF;    basicAnimation.removedOnCompletion=NO;        [basicAnimation setValue:[NSNumber numberWithFloat:toValue] forKey:@"KCBasicAnimationProperty_ToValue"];        return basicAnimation;}#pragma mark 关键帧移动动画-(CAKeyframeAnimation *)translationAnimation{    CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animationWithKeyPath:@"position"];        CGPoint endPoint= CGPointMake(55, 400);    CGPathRef path=CGPathCreateMutable();    CGPathMoveToPoint(path, NULL, _layer.position.x, _layer.position.y);    CGPathAddCurveToPoint(path, NULL, 160, 280, -30, 300, endPoint.x, endPoint.y);        keyframeAnimation.path=path;    CGPathRelease(path);    [keyframeAnimation setValue:[NSValue valueWithCGPoint:endPoint] forKey:@"KCKeyframeAnimationProperty_EndPosition"];        return keyframeAnimation;}#pragma mark 创建动画组-(void)groupAnimation{    //1.创建动画组    CAAnimationGroup *animationGroup=[CAAnimationGroup animation];        //2.设置组中的动画和其他属性    CABasicAnimation *basicAnimation=[self rotationAnimation];    CAKeyframeAnimation *keyframeAnimation=[self translationAnimation];    animationGroup.animations=@[basicAnimation,keyframeAnimation];        animationGroup.delegate=self;    animationGroup.duration=10.0;//设置动画时间,如果动画组中动画已经设置过动画属性则不再生效    animationGroup.beginTime=CACurrentMediaTime()+5;//延迟五秒执行        //3.给图层添加动画    [_layer addAnimation:animationGroup forKey:nil];}#pragma mark - 代理方法#pragma mark 动画完成-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{    CAAnimationGroup *animationGroup=(CAAnimationGroup *)anim;    CABasicAnimation *basicAnimation=animationGroup.animations[0];    CAKeyframeAnimation *keyframeAnimation=animationGroup.animations[1];    CGFloat toValue=[[basicAnimation valueForKey:@"KCBasicAnimationProperty_ToValue"] floatValue];    CGPoint endPoint=[[keyframeAnimation valueForKey:@"KCKeyframeAnimationProperty_EndPosition"] CGPointValue];        [CATransaction begin];    [CATransaction setDisableActions:YES];        //设置动画最终状态    _layer.position=endPoint;    _layer.transform=CATransform3DMakeRotation(toValue, 0, 0, 1);        [CATransaction commit];}@end

运行效果:

AnimationGroupEffect


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果孩子很叛逆骂人打人怎么办 错过了今年规培怎么办 枣木怎么办才能搞直了 高中生和家里闹意见离家出走怎么办 校长信箱实名举报了怎么办 枣子吃多了胀气怎么办 红枣吃多了会怎么办 宁波南苑e家会员卡怎么办 宁波社保卡丢了怎么办 奶茶汉堡店经营不好改怎么办 军人保障卡丢了怎么办 军人保障卡丢失了怎么办 军人保障卡掉了怎么办 椎基底动脉供血不足怎么办 颈椎压迫神经脑供血不足怎么办 脑部基底动脉轻度狭窄怎么办 胸壁疼痛我该怎么办 厂房面积小于泄压面积怎么办 江苏海门农村自建房房产证怎么办 颈总动脉斑块形成怎么办 颈椎引起腔梗头晕怎么办 魅族手机变成英文怎么办 员工失去了工作乐趣怎么办 古墓丽影9出bug怎么办 气炉子打不着火怎么办 下面人员不参加公司拓展怎么办 重点班的差生怎么办 江苏考生选修考d怎么办 眼睛里有虫子该怎么办 屋里毛絮特别多怎么办 信用卡人员核核查单位地址怎么办 红米note电源键失灵怎么办 红米note4x跳屏怎么办 红米开机键坏了怎么办 红米note2开关键不灵敏怎么办 大学生论文检测系统忘记密码怎么办 快手实验室没有k歌怎么办 皮肤一到冬天就会起皮脱落怎么办 嘴上的皮撕破了怎么办 身体皮肤干燥起皮怎么办 把公司数据库弄宕机了怎么办