2012-01-28 10 views
0

iOSユーザーインターフェイスを作成して、既存の画像内で矩形を選択し、その矩形の角を目的のサイズにドラッグします。私は4つのカスタムUIButton(30%アルファ)と4つのコーナーボタンの間に破線を描画するカスタムビュー(30%アルファも)を持っています。drawRect: "反転クリップ"を行うには

インターフェイスを「改善する」ために、私はdrawRectコードを使用して、クロップされた領域の外側のすべてが洗い流されている間に画像の切り取られた部分を「正常」に見せたいと思います。 UIViewが30%のアルファに設定されているため効果があります)。

明らかアルゴリズムは次のようになります。

  1. [UIColor whiteColor]
  2. は私が行うと[UIColor clearColor]を持つ4つの破線は

を埋める描き記入して画像全体を埋めますこれは、クリアフィルが表示されていません。これは、ステップ#1でピクセルが既に白に設定されていたため、ステップ#2のクリアカラーの「塗りつぶし」が見えないためです。おそらく、第2四角形の透明度を見ることができるブレンドモードがありますか?私は様々なブレンドモードについてはわかりません。動作

私の第二の試みは、以下のない:

  1. は、[UIColor whiteColor]フィルとの部分を表す各4つの追加の長方形を描く埋める[UIColor clearColor]を有する4つの点線を描きます切り取った領域の左、右、上、下に移動します。

私が言及したように、この方法は機能しますが、私には、これら4つの追加の四角形を毎回計算する代わりに簡単な方法が必要です。

CALayerとマスクを使用する類似の質問がありますが、これは私が必要としているものの過剰です。

これを改善する方法の提案はありますか?

答えて

2

ブレンドモードをkCGBlendModeCopyに設定し、clearColorを使用してピクセルのアルファをゼロにリセットすることができます。あなたもおそらくkCGBlendModeClearを使用することができますが、私はそれをテストしていません。

クリアするピクセルだけを含むようにクリッピングパスを設定し、CGContextClearRect(gc, CGRectInfinite)を呼び出すこともできます。

穴が開いたクリッピングマスクを使用する場合は、CALayerを使用せずに行うことができます。リンクした答えより少しだけ簡単に構築することができます。偶奇ルールそしてCGRectInfinite

CGContextSaveGState(GC); { 
    CGContextBeginPath(gc); 
    CGContextAddRect(gc, myRect); // or whatever simple path you want here 
    CGContextAddRect(gc, CGRectInfinite); 
    CGContextEOClip(gc); 

    // drawing code here is clipped to the exterior of myRect 

} CGContextRestoreGState(gc); 
+0

'kCGBlendModeClear'がトリックをしたと思われる!どうもありがとう! – lar3ry