2

私はCircleView基本的に継承して円を描くためUIViewに実装するクラスを使用しています。drawRectこれはすべて機能します。

私が理解できないのは、タッチすると(タッチコードが実装されている)円が大きくなったりポップしたりする方法です。通常、UIKit アニメーション フレームワークを使用してこれを行いますが、基本的にdrawRect関数をオーバーライドして円を直接描画することを考えます。では、これをアニメーション化するにはどうすればよいでしょうか。

- (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?
}
4

2 に答える 2

4

答えは、「成長またはポップ」の意味によって異なります。「ポップ」と聞くと、ビューが短時間で拡大し、元のサイズに再び縮小すると思います。一方、「成長」したものはスケールアップしますが、再びスケールダウンすることはありません。

短期間にスケールアップとスケールダウンを繰り返すものについては、変換を使用してスケールします。カスタム描画であろうとなかろうと、UIView には単純な変換をアニメーション化するためのサポートが組み込まれています。これがあなたが探しているものなら、数行のコードで済みます。

[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;
                 }];

一方、タップするたびに円をもう少し大きくしたい場合は、拡大するとビューがピクセル化されて見えるため、これではうまくいきません。カスタム アニメーションを作成するのは難しい場合があるため、実際のアニメーションにスケーリング変換を使用し、アニメーションの後でビューを再描画することをお勧めします。

[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;
                 }];

完全にカスタム アニメーションを作成したい場合は、Rob Napiers の Animating Custom Layer Properties に関する講演をご覧になることをお勧めします。

于 2013-10-29T21:22:58.807 に答える