「グラデーション」の意味がよくわかりません。コアグラフィックスを使用して図形にグラデーションを適用したとおっしゃっていたので、それを意味していると思います(前の回答が参照している影ではありません)。
境界線にグラデーションを適用することはできません。ただし、カスタムシェイプを使用して、独自の境界線を作成できます。これを行う最も簡単な方法は、外部パスと内部パスの2つのパスを作成することです。簡単にするために、パスが単純なrect(で指定されたrect drawRect
)であると仮定しましょう。
UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];
2番目のパスは、最初のパスよりも小さい内側のパスになります(境界線を作成するのに十分です)。
//To create a 1.0f borderWidth
CGRect innerRect = rect;
innerRect.origin.x += 1.0f;
innerRect.origin.y += 1.0f;
innerRect.size.width -= 2.0f;
innerRect.size.height -= 2.0f;
UIBezierPath *innerPath = [UIBezierPath bezierPathWithRect:innerRect];
次に、内部パスを通常のパスに追加し、パスがevenOddFillRuleを使用していることを確認します。evenOddFillRuleは、コアグラフィックスに、内側の部分だけを残して、外側の部分だけを塗りつぶすように指示します。ああ、あなたはパスにクリップしたいと思うでしょう:
[path appendPath:innerPath];
path.usesEvenOddFillRule = YES;
[path addClip];
この形状にグラデーションを適用すると、内側のパスの外側と外側のパスの内側が塗りつぶされ、グラデーションで境界線が作成されます。
アップデート
iOS 5.0をターゲットにしている場合は、これを行うためのより良い方法があるかもしれません。CGPathCreateCopyByStrokingPath()と呼ばれる注目に値する新しいパス関数を発見しました。詳細についてはリンクを参照してください。ただし、基本的には元のパスのストロークである新しいパスが作成されるため、新しいパスを埋めると、古いパスをストロークするのと同じ画像が作成されます。これは素晴らしいことです。新しいパスを塗りつぶす代わりに、それにクリップしてからグラデーションで塗りつぶして、グラデーションの境界線を付けることができるからです。これは、前に説明した方法よりもはるかに簡単ですが、もちろん、iOS5.0でのみ使用できます。これにより、新しい複雑な形状の作成もはるかに簡単になります。