2012-04-17 39 views
6

UIViewに簡単な境界線を置くのはとても簡単です。あなたは、単にそれをインポートし、QuartzCoreにリンク、および使用:UIViewでグラデーションの境界線を設定するにはどうすればよいですか?

self.view.layer.borderColor = [UIColor redColor].CGColor; 
self.view.layer.borderWidth = 2.0f; 

私の質問は...あるこの境界が勾配を使用するようにする方法はあります。グラデーションマスクをビュー全体に適用する方法を知っていますが、境界線だけではありません。私はこれがカスタムビューとdrawRect:の内部にCoreGraphicsの描画を含むことができると仮定していますが、どこから始めるべきかわかりません。

答えて

5

「グラデーション」の意味を完全にはわかりません。シェイプにグラデーションを適用するためにコアグラフィックを使用したと言われているので、前の回答が参照しているものではありません。

境界線にグラデーションを適用することはできません。ただし、カスタムシェイプを使用して独自の枠線を作成することはできます。これを行う最も簡単な方法は、外側のパスと内側のパスの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でのみ利用可能です。これにより、新しい複雑な図形を作成するのがずっと簡単になります。

+0

ありがとうございました。完全な実装については、https://gist.github.com/2423583を参照してください。これは内側の境界線を描画することに注意してください。これは、他のビューがその上に座っていると問題になる可能性があります。 – shawnwall

+0

@shawnwall私は自分の答えを更新しました。 iOS 5.0を使用している場合は、グラデーションの枠線を作成する簡単な方法があります。 –

0

私は、配列の色が反転した第2の勾配層を作成し、第2の層のフレームを第1の層よりもわずかに小さくした。境界線の外観を作成します。

関連する問題