gpt4 book ai didi

ios - CAKeyframeAnimation 手动进度

转载 作者:可可西里 更新时间:2023-11-01 04:42:01 26 4
gpt4 key购买 nike

我有一个 UIView,它的支持层有一个 CAKeyframeAnimation,它的 `path` 设置了一个简单的直线路径。
我可以让动画“卡住”,也就是说,手动更改它的进度吗?
例如:如果路径的长度为 100 点,将进度(偏移量?)设置为 0.45 应该会使 View 沿路径向下移动 45 点。

我记得看过一篇文章,它通过 CAMediaTiming 接口(interface)做了类似的事情(根据 slider 的值沿着路径移动 View ),但我没能找到它,即使搜索了几个小时。如果我以完全错误的方式处理这个问题,请告诉我。谢谢。

如果上面的内容不够清楚,这里有一些示例代码。

- (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
}

最佳答案

这是基于乔纳森所说的,只是更切题了。动画设置正确,但是 slider Action 方法应该如下:

- (void)sliderDidSlide:(UISlider *)slider 
{
// Create and configure a new CAKeyframeAnimation instance
CAKeyframeAnimation *animation = ...;
animation.duration = 1.0;
animation.speed = 0;
animation.removedOnCompletion = NO;
animation.timeOffset = slider.value;

// Replace the current animation with a new one having the desired timeOffset
[_label.layer addAnimation:animation forKey:@"LabelPathAnimation"];
}

这将使标签根据timeOffset沿着动画的路径移动。

关于ios - CAKeyframeAnimation 手动进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17464974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com