現時点では、drawRect
の内側にCGContextClipToMask
を使用して色付きの矩形をクリップするために、ビュー内でdrawRect
をオーバーライドしています。 時々、この切り抜かれた矩形の色を変更します。この場合、drawRect
が再び呼び出され、新しい色の矩形が再描画され、クリップされます。 今私は色を一度に変更したくないが、これをアニメーション化する。問題は、drawRectをオーバーライドするときにアニメーションが実行されないことです(drawRectは1回だけ呼び出され、すぐに呼び出されます)。クリッピング時にdrawRectをオーバーライドしないようにする方法
スーパークラスのdrawRect
をオーバーライドするように、このアニメーションを実行する方法がありますか。サブクラスを介して何らかの形でアニメーションが実行されるため、スーパークラスのdrawRectが複数回実行されます。アニメーション?
また、drawRect
をオーバーライドしないでも、この矩形を何らかの方法でクリップできますか? drawRect
は次のようになります。
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGImageRef maskImage = [[UIImage imageNamed:maskName] CGImage];
CGContextClipToMask(ctx, rect, maskImage);
CGContextSetFillColorWithColor(ctx, self.currentColor);
CGContextFillRect(ctx, rect);
あなたのアプローチでは、私は最後にアニメーションを使用できるようにdrawRectをオーバーライドする必要はありませんでした。私は今、標準のCoreAnimationを使うことができるので、タイマーを使う必要もなく、アニメーションメソッドを再帰的に実行する必要もありませんでした。どうもありがとう!注目すべきことは、png画像やクリアカラーの画像を使用する必要があることです(黒と白のマスクはもう使えませんが、問題はありません)。また、maskLayer.frame = [self bounds]を使用して、マスクするビューの境界にレイヤーフレームを設定する必要があります。 – JayAr