ios - iPhone : Animate circle with UIKit
<p><p>我正在使用一个 <code>CircleView</code> 类,它基本上继承了 <code>UIView</code> 并实现 <code>drawRect</code> 来绘制一个圆。这一切都有效,万岁!</p>
<p>但我无法弄清楚如何制作它,所以当我触摸它(实现触摸代码)时,圆圈会变大或弹出。通常我会使用 UIKit 动画框架来执行此操作,但考虑到我基本上是重写 <code>drawRect</code> 函数来直接绘制圆。那么如何制作动画呢?</p>
<pre><code>- (void)drawRect:(CGRect)rect{
CGContextRef context= UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, _Color.CGColor);
CGContextFillEllipseInRect(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
}
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
// Animate?
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>答案取决于您所说的“增长或流行”。当我听到“pop”时,我假设 View 会在短时间内放大,然后再次缩小到原始大小。另一方面,“增长”的东西会扩大,但不会再次缩小。</p>
<p>对于在短时间内再次放大和缩小的东西,我会使用变换来缩放它。无论是否自定义绘图,UIView 都内置了对简单变换动画的支持。如果这是您正在寻找的内容,那么它不会超过几行代码。</p>
<pre><code>[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionAutoreverse // reverse back to original value
animations:^{
// scale up 10%
yourCircleView.transform = CGAffineTransformMakeScale(1.1, 1.1);
} completion:^(BOOL finished) {
// restore the non-scaled state
yourCircleView.transform = CGAffineTransformIdentity;
}];
</code></pre>
<p>另一方面,如果您希望圆圈在每次点击时都增大一点,那么这对您来说是不可行的,因为 View 在放大时看起来会像素化。制作自定义动画可能会很棘手,所以我仍然建议您对实际动画使用缩放变换,然后在动画之后重绘 View 。</p>
<pre><code>[UIView animateWithDuration:0.3
animations:^{
// scale up 10%
yourCircleView.transform = CGAffineTransformMakeScale(1.1, 1.1);
} completion:^(BOOL finished) {
// restore the non-scaled state
yourCircleView.transform = CGAffineTransformIdentity;
// redraw with new value
yourCircleView.radius = theBiggerRadius;
}];
</code></pre>
<p>如果您真的非常想做一个完全自定义的动画,那么我建议您观看 <a href="http://vimeo.com/44986916" rel="noreferrer noopener nofollow">Rob Napiers talk on Animating Custom Layer Properties</a> ,他的例子甚至是你正在做的事情(增长一个圆圈)。 </p></p>
<p style="font-size: 20px;">关于ios - iPhone : Animate circle with UIKit,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/19668824/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/19668824/
</a>
</p>
页:
[1]