49.关键帧动画

来源:互联网 发布:淘宝视频html代码 编辑:程序博客网 时间:2024/05/01 22:30

由于核心动画的基础动画只能设置一次的值,关键帧动画可以设置多组值:

1.创建多条路径:- (void)test{    // 1.创建核心动画    CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];    // 1.1告诉系统执行什么动画    keyAnima.keyPath = @"position";    NSValue *v1 = [NSValue valueWithCGPoint:CGPointMake(0, 100)];    NSValue *v2 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];    NSValue *v3 = [NSValue valueWithCGPoint:CGPointMake(100, 200)];    NSValue *v4 = [NSValue valueWithCGPoint:CGPointMake(0, 200)];    NSValue *v5 = [NSValue valueWithCGPoint:CGPointMake(0, 100)];    keyAnima.values = @[v2, v3, v4, v5];    //keyAnima.keyTimes = @[@(0.5) ,@(0.5), @(0.5)];    //设置动画节奏    keyAnima.timingFunction =  [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];    // 1.2保存执行完之后的状态    // 1.2.1执行完之后不删除动画    keyAnima.removedOnCompletion = NO;    // 1.2.2执行完之后保存最新的状态    keyAnima.fillMode = kCAFillModeForwards;    // 1.3设置动画时间    keyAnima.duration = 2;    // 2.观察动画什么时候开始执行, 以及什么时候执行完毕,也不需要协议,原因和46篇文章的第二种自定义方式的解释相同    keyAnima.delegate = self;    // 2.添加核心动画,相当于一个标记,forKey:可以利用这个标记停止动画(removeAnimationForKey:)    [self.customView.layer addAnimation:keyAnima forKey:@"abc"];}- (void)animationDidStart:(CAAnimation *)anim{    NSLog(@"animationDidStart");}- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{    NSLog(@"animationDidStop");}
2.绘制一定形状的路径:关键帧动画绘制动画路径- (void)test1{    // 1.创建核心动画    CAKeyframeAnimation *keyAnima = [CAKeyframeAnimation animation];    // 1.1告诉系统执行什么动画    keyAnima.keyPath = @"position";    CGMutablePathRef path = CGPathCreateMutable();    CGPathAddEllipseInRect(path, NULL, CGRectMake(0, 100, 200, 200));    //会按照这个园的路径进行平移    keyAnima.path = path;    CGPathRelease(path);    // 1.2保存执行完之后的状态    // 1.2.1执行完之后不删除动画    keyAnima.removedOnCompletion = NO;    // 1.2.2执行完之后保存最新的状态    keyAnima.fillMode = kCAFillModeForwards;    // 1.3设置动画时间    keyAnima.duration = 2;    // 3.添加核心动画    [self.customView.layer addAnimation:keyAnima forKey:@"abc"];}
0 0
原创粉丝点击