菜鸟教程小白 发表于 2022-12-13 14:30:43

ios - CABasicAnimation - 在暂停期间更改动画开始值


                                            <p><p>为了360度旋转我使用CABasicAnimation,这样:</p>

<pre><code>func startRotate(from : Double) {
    let rotation : CABasicAnimation = CABasicAnimation(keyPath: &#34;transform.rotation.z&#34;)
    rotation.fromValue = from
    rotation.toValue = NSNumber(value: M_PI * 2 - from)
    rotation.duration = 10
    rotation.isCumulative = true
    rotation.repeatCount = 1
    self.cdImage.layer.add(rotation, forKey: &#34;rotationAnimation&#34;)

}
</code></pre>

<p>第一次 cdImage( View )从值 0 开始。</p>

<p>当动画到达中间时(5 秒后),我想停止动画并为 cdImageView 设置一个变换,例如将 View 返回 20 度并从新位置恢复。</p>

<p>通过这种方式:
1.我调用stopRotate函数</p>

<pre><code>func stopRotate(from : Double) {
    self.cdImage.layer.removeAnimation(forKey: &#34;rotationAnimation&#34;)   
}
</code></pre>

<ol 开始=“2”>
<li><p>我设置了一个新的变换</p>

<pre><code>self.cdImage.transform = CGAffineTransform(rotationAngle: imageAngle *CGFloat(M_PI) / 180);
</code></pre> </li>
<li><p>使用新值调用 startRotate </p>

<p>startRotate(imageAngle * CGFloat(M_PI)/180)</p></li>
</ol>

<p>我假设动画将从新位置开始并再次旋转 360 度 View ,但实际上动画从 0 度开始循环,我如何才能从新位置恢复新动画?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果你想从中断的地方继续,当你停止动画时,你想:</p>

<ul>
<li>捕捉它旋转了多少(见 <a href="https://stackoverflow.com/a/9712319/1271826" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/9712319/1271826</a>);</li>
<li>通过检查表示层确定飞行中的值;</li>
<li>相应地设置图层的<code>transform</code>(以便在您移除动画时它会保留在那里);和</li>
<li>移除动画</li>
</ul>

<p>因此:</p>

<pre><code>var angle: CGFloat?

func stopRotate() {
    let transform = cdImage.layer.presentation()!.transform
    angle = atan2(transform.m12, transform.m11);
    cdImage.layer.transform = transform
    cdImage.layer.removeAnimation(forKey: &#34;rotationAnimation&#34;)
}
</code></pre>

<p>然后,您可以在重新启动时从该 <code>角度</code> 开始动画。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - CABasicAnimation - 在暂停期间更改动画开始值,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41520065/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41520065/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - CABasicAnimation - 在暂停期间更改动画开始值