Quartz 2D编程笔记
當我們需要在一個圖形上下文中構建一個路徑時,我們需要調用CGContextBeginPath來標記Quartz。然后,我們調用函數CGContextMovePoint來設置每一個圖形或子路徑的起始點。在構建起始點后,我們可以添加直線、弧、曲線。記住如下規則:
- 在開始繪制路徑前,調用函數CGContextBeginPath;
- 直線、弧、曲線開始于當前點。空路徑沒有當前點;我們必須調用CGContextMoveToPoint來設置第一個子路徑的起始點,或者調用一個便利函數來隱式地完成該任務。
- 如果要閉合當前子路徑,調用函數CGContextClosePath。隨后路徑將開始一個新的子路徑,即使我們不顯示設置一個新的起始點。
- 當繪制弧時,Quartz將在當前點與弧的起始點間繪制一條直線。
- 添加橢圓和矩形的Quartz程序將在路徑中添加新的閉合子路徑。
- 我們必須調用繪制函數來填充或者描邊一條路徑,因為創建路徑時并不會繪制路徑。
在繪制路徑后,將清空圖形上下文。我們也許想保留路徑,特別是在繪制復雜場景時,我們需要反復使用。基于此,Quartz提供了兩個數據類型來創建可復用路徑—CGPathRef和CGMutablePathRef。我們可以調用函數CGPathCreateMutable來創建可變的CGPath對象,并可向該對象添加直線、弧、曲線和矩形。Quartz提供了一個類似于操作圖形上下文的CGPath的函數集合。這些路徑函數操作CGPath對象,而不是圖形上下文。這些函數包括:
- CGPathCreateMutable,取代CGContextBeginPath
- CGPathMoveToPoint,取代CGContextMoveToPoint
- CGPathAddLineToPoint,取代CGContexAddLineToPoint
- CGPathAddCurveToPoint,取代CGContexAddCurveToPoint
- CGPathAddEllipseInRect,取代CGContexAddEllipseInRect
- CGPathAddArc,取代CGContexAddArc
- CGPathAddRect,取代CGContexAddRect
- CGPathCloseSubpath,取代CGContexClosePath
如果想要添加一個路徑到圖形上下文,可以調用CGContextAddPath。路徑將保留在圖形上下文中,直到Quartz繪制它。我們可以調用CGContextAddPath再次添加路徑。
繪制路徑
路徑描邊的函數
Quartz提供了表3-4中的函數來描邊當前路徑。其中一些是描邊矩形及橢圓的便捷函數。
表3-4 描邊路徑函數
?
void CGContextSetLineDash
?
裁減圖形上下文的函數
?
?
混合模式指定了Quartz如何將繪圖繪制到背景上。Quartz默認使用普通混合模式(normal blend mode),該模式使用如下公式來計算前景繪圖與背景繪圖如何混合:
“顏色與顏色空間”章節里面詳細討論了顏色值的alpha組件,該組件用于指定顏色的透明度。在本章的例子中,我們可以假設顏色值是完全不透明的(alpha = 0)。對于不透明的顏色值,當我們用普通混合模式時,所有繪制于背景之上的繪圖都會遮掩住背景。
我們可以調用函數CGContextSetBlendMode并傳遞適當的混合模式常量值來設置混合模式來達到我們想到的效果。記住混合模式是圖形狀態的一部分。如果調用了函數CGContextSaveGState來改變混合模式,則調用函數CGContextRestoreGState來重新設置混合模式為普通混合模式。
kCGBlendModeNormal
kCGBlendModeMultiply
kCGBlendModeScreen
kCGBlendModeOverlay
kCGBlendModeDarken
?
kCGBlendModeLighten
kCGBlendModeColorDodge
?
kCGBlendModeColorBurn
kCGBlendModeSoftLight
?
kCGBlendModeHardLight
kCGBlendModeDifference
?
kCGBlendModeExclusion
kCGBlendModeHue
kCGBlendModeSaturation
kCGBlendModeColor
?
kCGBlendModeLuminosity
轉載于:https://www.cnblogs.com/chinaxxren/p/3332271.html
總結
以上是生活随笔為你收集整理的Quartz 2D编程笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个字符串是否为回文-链队(新建,进
- 下一篇: JEECMS编辑漏洞及随便拿webshe