6

に単純な境界線を付けるのは非常に簡単UIViewです。リンクしてQuartzCoreインポートし、以下を使用するだけです。

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

私の質問は...この境界線にグラデーションを使用させる方法はありますか?ビュー全体にグラデーションマスクを適用する方法を知っていますが、境界線だけに適用する方法は知っていません。これにはカスタムビューとCoreGraphics内部drawRect:の描画が含まれる可能性があると思いますが、どこから始めればよいかわかりません。

4

2 に答える 2

5

「グラデーション」の意味がよくわかりません。コアグラフィックスを使用して図形にグラデーションを適用したとおっしゃっていたので、それを意味していると思います(前の回答が参照している影ではありません)。

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

于 2012-04-18T11:32:09.817 に答える
0

配列内で色を反転させた2番目のグラデーションレイヤーを作成し、2番目のレイヤーのフレームを最初のレイヤーよりもわずかに小さくしました。境界線の外観を作成します。

于 2012-04-20T01:58:02.510 に答える