核心动画02-CAKeyframeAnimation帧动画

CAKeyframeAnimation可以在任意多个值之间切换,比BasicAnimation多了这个功能

在storyboard上面放置一个view,name = redView,通过给view的layer设置动画,达到动画的效果

一、 指定一个数组,沿着这个数组走

- (void)testMove
{
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    
    anim.keyPath = @"position";
    NSValue *v1 = [NSValue valueWithCGPoint:CGPointZero];
    NSValue *v2 = [NSValue valueWithCGPoint:CGPointMake(100, 0)];
    NSValue *v3 = [NSValue valueWithCGPoint:CGPointMake(100, 200)];
    NSValue *v4 = [NSValue valueWithCGPoint:CGPointMake(0, 200)];
    
    anim.values = @[v1,v2,v3,v4];
    //没调试出来,具体用不到,了解
    //    anim.keyTimes = @[@(0.5),@(0.25),@(0.25)];//每个帧动画具体的执行事件,表示占duration这个时间的百分之多少
    anim.duration = 2.0;
    
    //保存动画结束时候的状态,而不是回到初始的状态
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    [self.redView.layer addAnimation:anim forKey:nil];
}

二、path为position指定一个路径,沿着这个路径走

-(void)testMove2
{
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    
    anim.keyPath = @"position";
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    
    CGMutablePathRef path = CGPathCreateMutable();
    
    CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 200, 200));
    
    anim.path = path;
    
    CGPathRelease(path);//create创建的就需要手动释放
    
    //控制动画的节奏
    //kCAMediaTimingFunctionEaseInEaseOut : 一开始比较慢,中间会加快,临近结束的时候会变慢
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    //代理,监听动画开始的时候和结束的时候做一些事情
    anim.delegate = self;//不需要遵守协议,NSObject的分类方法
    
    [self.redView.layer addAnimation:anim forKey:nil];
}
#pragma make - 动画的代理方法
#pragma make 动画开始的时候调用
-(void)animationDidStart:(CAAnimation *)anim
{
    NSLog(@"animationDidStart");
}
#pragma make 动画结束的时候调用
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    NSLog(@"animationDidStop");
}

 

posted on 2015-05-15 00:30  快乐加油站789  阅读(179)  评论(0编辑  收藏  举报

导航