2012-01-28 32 views
0

我創建一個iOS的用戶界面,允許用戶選擇現有圖像內的矩形,拖動矩形的角到所需的大小如何。我現在有四個自定義UIButtons(30%阿爾法)和一個自定義視圖(也有30%阿爾法),在四個角落按鈕之間繪製虛線。的drawRect:我做一個「倒卡」

爲了「改善」界面,我希望我的drawRect代碼能夠使圖像的裁剪部分顯得「正常」,而裁剪區域外的所有東西都被沖掉(填充白色,這會給我正確的因爲UIView設置爲30%alpha)。

明顯的算法是:

  1. 裝滿[的UIColor whiteColor]整個圖像填滿
  2. 畫出四條虛線與[的UIColor clearColor]填寫

當我做這個,明顯的填充沒有出現。我認爲這是因爲在步驟#2中沒有看到清晰顏色的「填充」,因爲在步驟#1中像素已經被設置爲白色。也許有一種混合模式可以讓我看到第二個矩形的透明度?我不確定各種混合模式。

我的第二次嘗試,其工作方式,執行以下操作:

  1. 畫出與[的UIColor clearColor]四個虛線填充
  2. 繪製附加四個矩形與[的UIColor whiteColor]填充,每個代表的部分在裁剪區域的左側,右側,上方和下方。

正如我所說,這種方法的工作原理,但在我看來,應該有一個更簡單的方法,而不是我必須每次計算這四個額外的矩形。

有對使用的CALayer和口罩SO Create layer mask with custom-shaped hole過類似的問題,但這似乎是大材小用我需要什麼。

有沒有人有任何建議如何改善?

回答

2

您可以將混合模式設置爲kCGBlendModeCopy和使用clearColor到像素的Alpha重置爲零。你大概也可以使用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 2012-01-28 04:31:54

相關問題