2011-05-09 66 views
6

我正在嘗試爲iPad繪製一幅簡單的繪圖應用程序,您可以在圖片上繪製,而我使用CGContext的東西來做,但我最初計劃處理擦除的方式是隻是畫白色的東西...除了我今天才意識到,當你在繪製另一張圖像時它不起作用,因爲當你「擦除」時,你也會「擦除」背景圖像。使用CGContext繪圖後擦除

有什麼方法可以支持實際的擦除?

謝謝!

回答

4

在圖像上方的圖層中顯示用戶的圖形。然後擦除就像在繪圖層上繪製透明色塊一樣簡單,以便讓其下方的圖像像素顯示出來。

+0

你如何繪製一個透明的補丁?我使用了'CGContextSetRGBStrokeColor',其alpha值爲0.0,但似乎不起作用。 – Roberto 2011-06-10 00:03:57

+0

玩合成模式(例如複製而不是SourceIn),並考慮填充以及撫摸。 – 2011-06-10 01:04:31

+2

查看源代碼https://github.com/yusenhan/Smooth-Line-查看 – 2012-12-10 13:49:30

19

我還需要擦除功能。基於@傑里米的回答,這裏是我的工作:

CGContextRef cgref = UIGraphicsGetCurrentContext(); 

if(erase == TRUE) // Erase to show background 
{ 
    CGContextSetBlendMode(cgref, kCGBlendModeClear); 
} 
else // Draw with color 
{ 
    CGContextSetBlendMode(cgref, kCGBlendModeNormal); 
} 
+0

你是我的英雄,非常感謝你給予這樣一個簡單的解決方案! – Bek 2012-11-22 11:08:40

+1

首先我要通過Ray Wenderlich的教程來創建一個簡單的繪圖應用程序。一切都適用於它,但是當我將混合模式更改爲kCGBlendModeClear時,它所做的一切就是擦掉整個畫布,一旦觸摸結束被調用。有什麼想法嗎? – 2014-05-01 22:14:15

+0

非常好,但過於冗長。你可以用同樣的方法做同樣的事情:'CGContextSetBlendMode(UIGraphicsGetCurrentContext(),erase?kCGBlendModeClear:kCGBlendModeNormal);' – SaltyNuts 2014-10-30 17:16:17