Core Image だけが電話にあれば、これは些細なことです。アニメート可能なフィルターが必要です。;-)
CAGradientLayer では、そのプロパティをアニメーション化できますが、現在は線形グラデーションのみをサポートしています。
Core Animation を使用してアニメーション化する場合に考えられる唯一のことは、グラデーションを描画しているビューの変換をアニメーション化することです。
ビューの変換を非常に簡単にアニメーション化できます。おそらく既に行っているように、ビューにグラデーションを描画し、スケーリングを使用して変換をアニメーション化します。明示的なアニメーションを使用すると、次のようになります。
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
[anim setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]];
// Scale x and y up
[anim setToValue:[NSValue valueWithCATransform3D:
CATransform3DMakeScale (1.0f, 1.0f,0.0f)]];
[anim setAutoreverses:YES];
[anim setRepeatCount:HUGE_VALF];
[[gradientView layer] addAnimation:anim];
残念ながら、これはパルスよりも拡大と縮小のように見えると思います(試したことはありませんが)。
この時点でグラデーションで真のパルスが必要な場合は、おそらく独自のタイマーを使用してアニメーションを手動で行う必要があると思います。定期的に再描画して、内側の半径の値を変更してください。うーん。それが唯一の方法であるとは絶対に確信していませんが、あなたが望んでいるようなグラデーションを備えた魅力的なパルスアニメーションを電話でまだ見たことがありません.
ある時点で試してみたいアイデアがもう 1 つあります。Core Animation で、任意のプロパティ/値をアニメーション化できるようになりました。理論的には、名前を付けた任意のキーパス (たとえば、innerRadius など) を使用してアニメーションを設定し、-drawLayerInContext デリゲート メソッドをオーバーライドすることができます。次に、飛行中にpresentationLayerから現在の値を取得し、代わりにグラデーションを再描画できます。これはまだ試していないのであくまで理論上の話ですが、検討する価値はありそうです。
よろしくお願いします。