【问题标题】:Animated Piechart fillmode?动画饼图填充模式?
【发布时间】:2014-10-28 23:54:19
【问题描述】:

我正在为一个圆圈的笔划设置动画,它看起来像

我正在为背景制作一个圆圈,然后我使用相同的路径,但动画路径更细

CAShapeLayer *minutesBackground = [CAShapeLayer layer];
minutesBackground.path=[UIBezierPath bezierPathWithArcCenter:CGPointMake((screenWidth/2), (radiusMinutes+spacing)) radius:radiusMinutes startAngle:2*M_PI*0-M_PI_2 endAngle:2*M_PI*1-M_PI_2 clockwise:YES].CGPath;
minutesBackground.fillColor = clear;
minutesBackground.strokeColor = [UIColor blackColor].CGColor;
minutesBackground.lineWidth = minutesWidth+2;

minutesCircle = [CAShapeLayer layer];
minutesCircle.path=minutesBackground.path;
minutesCircle.fillColor=clear;
minutesCircle.strokeColor=[UIColor orangeColor].CGColor;
minutesCircle.lineWidth = minutesWidth;    
minutesCircle.shadowRadius = 2;
minutesCircle.shadowColor = [UIColor orangeColor].CGColor;
minutesCircle.shadowOpacity = 5;
minutesCircle.shadowOffset = CGSizeMake(0.0, 0.0);

动画是我在互联网上找到的 :)

minutesAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
minutesAnimation.duration = work;
minutesAnimation.repeatDuration=work;
minutesAnimation.removedOnCompletion=YES;
minutesAnimation.fillMode = kCAFillModeRemoved;
minutesAnimation.fromValue=@(0);
minutesAnimation.toValue=@(1);
minutesAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[minutesCircle addAnimation:minutesAnimation forKey:@"drawCircleAnimation"];

如果我将它设置为重复一段时间,它具有所需的效果,它会绘制,最后它被删除,然后再次绘制。

但是,我有一个在动画完成时弹出的按钮,按下该按钮时,我禁用它并将其 alpha 设置为 0.0 以隐藏它,然后重新启动计时器。

当我重新启动计时器时,之前绘制的圆圈仍然存在。 (可能是一些线程问题?)

任何帮助表示赞赏,不确定我是否共享了足够的代码.. 让我知道是否有更多帮助我的情况:)

【问题讨论】:

    标签: ios animation core-animation quartz-core cabasicanimation


    【解决方案1】:

    您是否想让minutesCircle 在动画完成后消失?

    如果是这样,问题在于您已使用 strokeStart (0.0) 和 strokeEnd (1.0) 的默认值定义了 minutesCircleminutesAnimation 正在动画化 strokeEnd0.01.0 的变化。但是,当动画完成并被删除时(因为您已指定 YESremovedOnCompletionkCAFillModeRemovedfillMode),minutesCirclestrokeEnd 恢复为原始值 @987654337 @(这意味着当动画被移除时橙色弧将保持可见)。

    如果你想让minutesCircle在动画完成后不可见,当你第一次创建minutesCircle时,指定strokeStartstrokeEnd都是0

    minutesCircle.strokeStart = 0.0;
    minutesCircle.strokeEnd = 0.0;
    

    现在,当您的动画完成并被删除时,minutesCirclestrokeEnd 将恢复为原来的值,即 0.0,即使橙色笔划不再可见。

    【讨论】:

    • 设置这两个值完全停止了动画的发生
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2023-03-23
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多