ios - 在自定义 UIView 中动画 UIBezierPath 不起作用
<p><p>当用户触摸我的 View(touchesEnded) 时,我正在尝试在我的自定义 <code>UIView</code> 中为 <code>UIBezierPath</code> 设置动画(从一条路径到另一条路径)。</p>
<p>我的绘图代码:</p>
<pre><code>- (void)drawRect:(CGRect)rect {
// Drawing code
;
;
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextAddPath(currentContext, _startPath.CGPath);
CGContextDrawPath(currentContext, kCGPathStroke);
}
- (void) createStartPath
{
_startPath = UIBezierPath.bezierPath;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
}
- (void) createEndPath
{
_endPath = UIBezierPath.bezierPath;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
//;
}
</code></pre>
<p>我从这里开始我的动画(希望将一条路径“变形”到另一条路径):</p>
<pre><code>- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
;
CAShapeLayer * myLineShapeLayer = [ init];
CABasicAnimation * pathAnimation = ;
pathAnimation.fromValue = (__bridge id);
pathAnimation.toValue = (__bridge id);
pathAnimation.duration = 3.0f;
;
}
</code></pre>
<p>我看到 <code>startPath</code> 和我的 <code>touchesEnded</code> 被调用,但没有任何动画显示 <code>endPath</code>。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>为了让您的动画正常工作,请将您的 <code>myLineShapeLayer</code> 添加为 View 的 <code>layer</code> 的子层:</p>
<p>例如,在 <code>viewDidLoad</code> 中:</p>
<pre><code>;
</code></pre>
<p>为了在动画结束后仍然能够在屏幕上看到 <code>endPath</code>,我们可以先将 <code>endPath</code> 分配给 <code>path<<code>CAShapeLayer</code> 的/code> 属性:</p>
<pre><code>myLineShapeLayer.path = ;
</code></pre>
<p>因此我们在没有 <code>toValue</code> 的情况下制作动画:</p>
<pre><code>CABasicAnimation * pathAnimation = ;
pathAnimation.fromValue = (__bridge id);
pathAnimation.duration = 3.0f;
;
</code></pre>
<p>动画的结束效果会在动画结束后保留在屏幕上。</p></p>
<p style="font-size: 20px;">关于ios - 在自定义 UIView 中动画 UIBezierPath 不起作用,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/31287821/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/31287821/
</a>
</p>
页:
[1]