菜鸟教程小白 发表于 2022-12-13 11:46:54

ios - 如何为 CAShapeLayer 的填充设置动画?


                                            <p><p>我有一个圆形 CAShapeLayer,我想为其填充设置动画。我已将我的 CAShapeLayer 创建为</p>

<pre><code>- (void)viewDidLoad {
    ;

    // Filled layer
    CAShapeLayer *filledCircleShape = ;
    filledCircleShape.frame = CGRectMake(100, 100, 100, 100);
    filledCircleShape.fillColor = .CGColor;
    filledCircleShape.strokeColor = .CGColor;
    filledCircleShape.lineWidth = 2;
    filledCircleShape.path = .CGPath;
    ;

    self.filleShapeLayer = filledCircleShape;
}

- (UIBezierPath *)filledBezierPathWithRelativeFill:(CGFloat)relativeFill
{
    UIBezierPath *filledCircleArc = ;
    CGFloat arcAngle = 2 * acos(1 - 2 * relativeFill); // 2arccos ((r - 2rp) / r) == 2 arccos(1 - 2p)
    CGFloat startAngle = (M_PI - arcAngle) / 2;
    CGFloat endAngle = startAngle + arcAngle;
    ;

    return filledCircleArc;
}
</code></pre>

<p>这看起来像这样:
<a href="/image/oMyHJ.png" rel="noreferrer noopener nofollow"><img src="/image/oMyHJ.png" alt="enter image description here"/></a> </p>

<p>我已经尝试了以下方法来使其动画路径更改。</p>

<pre><code>- (void)animate
{
    UIBezierPath *toBezierPath = ;
    CABasicAnimation *pathAnimation = ;
    pathAnimation.duration = 5.f;
    pathAnimation.toValue = (__bridge id)toBezierPath.CGPath;
    ;
}
</code></pre>

<p>哪种有效。形状层动画但看起来像这样</p>

<p> <a href="/image/pBG5Q.png" rel="noreferrer noopener nofollow"><img src="/image/pBG5Q.png" alt="enter image description here"/></a> </p>

<p> <a href="/image/mIX7R.png" rel="noreferrer noopener nofollow"><img src="/image/mIX7R.png" alt="enter image description here"/></a> </p>

<p>我希望形状层像沙漏一样进行动画处理,从一个百分比开始,然后向下动画到另一个百分比。 </p>

<p>关于如何使用 CAShapeLayer 实现这一点的任何想法? </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>CAShapeLayer 对于填充来说太过分了。它不会神奇地以您想要的方式制作动画,而且无论如何也没有必要。只需从一个大的紫色方形 View 开始并向下设置动画——但放置一个蒙版,以便只有形状区域的内部可见——就像我在这里所做的那样(除了我正在填充而不是清空):</p>

<p> <a href="/image/n6SpI.gif" rel="noreferrer noopener nofollow"><img src="/image/n6SpI.gif" alt="enter image description here"/></a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何为 CAShapeLayer 的填充设置动画?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33697755/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33697755/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何为 CAShapeLayer 的填充设置动画?