ブロックコードを使用して、データを反映する水平プログレスバーを作成しています。データは何でもかまいません。最小値、最大値、およびアニメーションを設定できる現在の値 (つまり、最小値 0、最大値 100、現在の値 50) を取るだけで、プログレス バーは 50% いっぱいになります。内部にビューを含むプログレスバーコンテナーがあり、アニメーション中にビューが引き伸ばされます。
ブロックコードを使用してアニメーション部分を正常に動作させました。
[UIView animateWithDuration:3.0
delay:0.0f
options:UIViewAnimationCurveEaseInOut
animations:^(void)
{
progressView.frame = CGRectMake(progressView.frame.origin.x,progressView.frame.origin.y,iWidth,progressView.frame.size.height);
}
completion:^(BOOL finished)
{
}];
私がやりたいのは、これがアニメーション化されている間、サブレイヤーを挿入してグラデーションをゆっくりと変更することです。簡単な例
(This method will be called on a timer, the idea is to slowly change the gradient
after 0.5 seconds for example)
CAGradientLayer *testLayer = [BackgroundLayer customGradient:iRedValue :iGreenValue :0];
testLayer.frame = progressView.bounds;
[progressView.layer insertSublayer:testLayer atIndex:1];
(背景レイヤーは、ユーザーがRGB値を使用してカスタムグラデーションカラーを作成できるようにする、私が持っているカスタムクラスです)。アイデアは、progressView のアニメーションが終了するにつれて、グラデーションをゆっくりと変更しながらサブレイヤーを挿入し続けることです。アイデアは、ビューが 1 つの色 (たとえば緑) から始まり、バーに沿ってアニメーションが進むにつれて、色が琥珀色に変わり、最大値に達すると赤くなるというものです。
サブレイヤーを追加すると、アニメーションが最後までジャンプします。これは、アニメーションの終了後に testLayer が progressView の幅を取り、それを追加するためです。アニメーションの過程でこれをゆっくりと行いたいと思います。
これを行う方法についてのアイデアはありますか?
前もって感謝します!