• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 更改正在运行的动画的持续时间(速度)

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:33:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在制作一个无限旋转动画,当我第一次启动它时效果很好。我想要实现的是能够在运行时改变旋转速度。我在animationView中有这个功能:

-(void)startBlobAnimationfloat)deltaT
{
    [UIView beginAnimations"Spinning" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveLinear];
    [UIView setAnimationDuration:deltaT];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationRepeatCount:FLT_MAX];

    CGAffineTransform rotation = CGAffineTransformMakeRotation(-symmetryAngle);
    blobView.transform = rotation;

    // Commit the changes and perform the animation.
    [UIView commitAnimations];
}

在动画首次启动后使用不同的 deltaT 值调用它没有任何效果。如果我在函数的开头添加 [wheelView.layer removeAllAnimations]; 那么它会成功停止动画但不会重新启动它。我还尝试使用 block 命令启动动画,结果相同。在这一点上,我完全感到困惑。有人可以解释问题是什么吗?谢谢!



Best Answer-推荐答案


经过长期的努力,我想出了一个似乎可以完美运行并在动画之间提供平滑过渡的解决方案。基本上我只是想出当前的旋转角度并用它以不同的速率重新启动动画。这里的一个关键点在最后一行:你必须有那个 anim.keyPath - 它不能是 Nil(从经验中得知)。我猜这样新动画会替换旧动画。哦,说得更清楚一点:symmetryAngle 是一种使对象看起来相同的旋转,例如 5 倍对称的 72 度。

-(void)startWheelsAnimationfloat)deltaT
{
    float startingAngle = 0.0;

    if(isAnimating) {
        // If animation is in progress then calculate startingAngle to
        // reflect the current angle of rotation
        CALayer *presLayer = (CALayer*)[blobView.layer presentationLayer];
        CATransform3D transform = [presLayer transform];
        startingAngle = atan2(transform.m12, transform.m11);
    }

    isAnimating = YES;

    // Restart the animation with different duration, and so that it starts
    // from the current angle of rotation
    CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath"transform.rotation.z" ] ;
    anim.duration = deltaT;
    anim.repeatCount = CGFLOAT_MAX;
    anim.fromValue = @(startingAngle);
    anim.toValue = @(startingAngle - symmetryAngle) ;
    [blobView.layer addAnimation:anim forKey:anim.keyPath];
}

关于ios - 更改正在运行的动画的持续时间(速度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589483/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap