「グラデーション」の意味を完全にはわかりません。シェイプにグラデーションを適用するためにコアグラフィックを使用したと言われているので、前の回答が参照しているものではありません。
境界線にグラデーションを適用することはできません。ただし、カスタムシェイプを使用して独自の枠線を作成することはできます。これを行う最も簡単な方法は、外側のパスと内側のパスの2つのパスを作成することです。
UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];
第二の経路は、(境界線を作るのに十分な)最初のものよりも小さい内部通路になるだろう:単純化のために、のパスは、単純な矩形(drawRect
に与えられた矩形)であると仮定しましょう:
//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];
あなたはこの形状にグラデーションを適用した場合、それは勾配との国境を作り、内部路外と外側のパスの内側に記入します。
UPDATE
あなたがこれを行うには良い方法があるかもしれないのiOS 5.0をターゲットに設定している場合。私はCGPathCreateCopyByStrokingPath()と呼ばれる注目すべき新しいパス機能を発見しました。詳細についてはリンクを参照してください。しかし、基本的に元のストークである新しいパスが作成されるので、新しいパスを埋めると古いパスを描くのと同じイメージが作成されます。新しいパスを塗りつぶす代わりに、クリップをクリップしてからグラデーションを塗りつぶして、グラデーションの境界線を作成することができます。これは私が言及した以前の方法よりはるかに簡単ですが、もちろん、iOS 5.0でのみ利用可能です。これにより、新しい複雑な図形を作成するのがずっと簡単になります。
ありがとうございました。完全な実装については、https://gist.github.com/2423583を参照してください。これは内側の境界線を描画することに注意してください。これは、他のビューがその上に座っていると問題になる可能性があります。 – shawnwall
@shawnwall私は自分の答えを更新しました。 iOS 5.0を使用している場合は、グラデーションの枠線を作成する簡単な方法があります。 –