
整个过程没什么特别需要注意的,反正就是几何到代码的转换过程,有一个点需要注意
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
basic.duration = _animationDuration;
basic.fromValue = @(from);
basic.toValue = @(to);
basic.removedOnCompletion = NO;
basic.delegate = self;
basic.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];;
[_shapeLayer addAnimation:basic forKey:@"basic"];
这段中fromValue和toValue,还有没出现的byValue,跟其他动画的值的计算有一些不同。在位移或者其他动画中,这个几个值分别代表动画的起始,终点,过程值,然后值都是直接使用的,比如从X坐标的2移动端到10,那么fromValue=@(2),toValue=@(10),
都是值的直接赋予。在strokeEnd这里则不一样,他的值的范围为0-1,是一种比例。比如在我们的demo中,如果轮盘的数量从3变化到2,如果消失的是下面那块,则第一块的起点坐标不会变化,终止角度从120度到了180,那么画的时候,起点fromValue = @(1/3.0);toValue=@(0.5);
这个是需要注意的,因为值一旦不对,就不会有动画。所以,一旦发现没有动画,就说明这个值产生了问题。
代码比较粗糙,有时间会整理
下载地址 https://github.com/fillinse/turnTable
网友评论