今天需要做一个动画,内容是:一条小鱼根据一条曲线轨迹运动
。
做这个动画想到了用UIBezierPath
贝塞尔曲线绘制运动轨迹,然后用CAKeyframeAnimation
做动画帧来实现。
动画倒是实现了,但在实现的时候遇到个比较大条的问题就是小鱼
沿着绘制的运动轨迹移动完成之后会沿着原路径返回。
查文档看了下需要removedOnCompletion
和fillMode
这两个属性配合使用:
keyframeAnimation.removedOnCompletion = NO;
keyframeAnimation.fillMode = kCAFillModeForwards;
结果还是不行。望山各种查资料也是这种答案。
最后无奈觉得会不会是提前close
了贝塞尔曲线导致的,位置调换,果然就可以了。
UIBezierPath *movePath = [UIBezierPath bezierPath];
/**/
[movePath moveToPoint:startPoint];
[movePath addQuadCurveToPoint:endPoint controlPoint:controlPoint];
CAKeyframeAnimation *keyframeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
keyframeAnimation.path = movePath.CGPath;
keyframeAnimation.removedOnCompletion = NO;
keyframeAnimation.fillMode = kCAFillModeForwards;
[_fishView.layer addAnimation:keyframeAnimation forKey:nil];
[movePath closePath];
还是基础太差,找个时间要恶补了。