Objective-c:实现轻松动画

 孙俊啟66864 发布于 2023-01-15 18:45

我有下面的代码来动画分数标签.你会如何改变它,以便它成为一个轻松的动画?

谢谢

- (void)animateFrom:(float)fromValue toValue:(float)toValue
{
    self.scoreAnimationFrom = fromValue;
    self.scoreAnimationTo = self.question.correctValue;

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateNumber:)];

    self.startTimeInterval = CACurrentMediaTime();
    [link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}

- (void)animateNumber:(CADisplayLink *)link
{
    float dt = ([link timestamp] - self.startTimeInterval) / self.duration;

    if (dt >= 1.0)
    {
        [link removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
        return;
    }

    float current = ((self.scoreAnimationTo - self.scoreAnimationFrom) * dt + self.scoreAnimationFrom);
    self.valueLabel.text = [NSString stringWithFormat:@"%f", current];
}

defagos.. 6

动画的进度由dt变量描述,该变量是介于0和1之间的值.对动画应用缓动时序非常简单,只需将此值汇总到适当的计时函数中,然后再应用它.定时功能的职责是根据特定的时序曲线将原始值转换为0到1之间的另一个值.有关计时功能的更多信息,请参阅Apple文档.

因此,在您的情况下,您需要应用缓出计时功能dt,例如:

dt = [[TimingFunction easeOutTimingFunction] solveForInput:dt];

Core Animation提供了CAMediaTimingFunction类,但遗憾的是它的_solveForInput:解决方法是私有的.存在几种可以使用的定时函数的开源实现,例如https://github.com/warrenm/AHEasing.

如果你很好奇,我最近也实现了一个等同_solveForInput:于一个类别的方法CAMediaTimingFunction.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有