2012-02-05 61 views
2

我有以下圖形,它呈現了一個圓形,其中心處的全綵色在邊緣處漸變爲0 alpha。當把它畫到屏幕上時,它看起來很完美。但是,當我在PDF上下文中繪製同樣的東西(CGPDFContextCreate)時,整個圓圈變得不透明。如果我在PDF中繪製任何其他常規路徑,則alpha會渲染罰款。所以只是漸變不起作用。這是一個錯誤還是我錯過了什麼?CGContextDrawRadialGradient不在PDF中呈現alpha?

 CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB(); 
     size_t num_locations = 2; 
     CGFloat locations[2] = { 1.0, 0.0 }; 

     CGColorRef color = [[UIColor redColor]CGColor]; 
     CGFloat *k = (CGFloat *)CGColorGetComponents(color); 
     CGFloat components[8] = { k[0], k[1], k[2], 0.0, k[0], k[1], k[2], 1.0 }; 

     CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, num_locations); 

     CGPoint c = CGPointMake(160, 160); 
     CGContextDrawRadialGradient(pdfContext, myGradient, c, 0, c, 60, 0); 

回答

2

從蘋果技術支持官方響應:

石英忽略的顏色梯度(或陰影) 捕獲的梯度(或陰影)時,PDF文檔,而是 治療的阿爾法值所有的顏色,如果他們是完全不透明的。此外, 當它將 漸變(或陰影)記錄到PDF文檔中時,Quartz忽略上下文中的全局alpha。一個可能的解決方法是使用位圖上下文捕獲陰影作爲位,並使用 生成的位創建一個CGImage,通過剪輯 區域繪製CGImage。這會產生預渲染的漸變(或陰影),但是 會將alpha內容捕獲到PDF文檔中。對於不包含 alpha的漸變(或陰影),此預渲染不應執行 。