核心动画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"); }