我有一个 UIView,其支持层有一个 CAKeyframeAnimation,它的“路径”设置为简单的直线路径。
我可以让动画“冻结”,可以这么说,并手动更改其进度吗?
例如:如果路径的长度为 100 点,则将进度(偏移量?)设置为 0.45 会使视图沿路径向下移动 45 点。
我记得看到一篇文章通过 CAMediaTiming 接口做了类似的事情(根据滑块的值沿路径移动视图),但即使经过几个小时的搜索,我也无法找到它。如果我以完全错误的方式处理这个问题,请告诉我。谢谢。
如果以上内容不够清楚,这里有一些示例代码。
- (void)setupAnimation
{
CAKeyFrameAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:_label.layer.position];
[path addLineToPoint:(CGPoint){200, 200}];
animation.path = path.CGPath;
animation.duration = 1;
animation.autoreverses = NO;
animation.removedOnCompletion = NO;
animation.speed = 0;
// _label is just a UILabel in a storyboard
[_label.layer addAnimation:animation forKey:@"LabelPathAnimation"];
}
- (void)sliderDidSlide:(UISlider *)slider
{
// move _label along _animation.path for a distance that corresponds to slider.value
}