開(kāi)發(fā)培訓(xùn)大神02-ui進(jìn)階0619手勢(shì)畫(huà)板15quartz2d_第1頁(yè)
開(kāi)發(fā)培訓(xùn)大神02-ui進(jìn)階0619手勢(shì)畫(huà)板15quartz2d_第2頁(yè)
開(kāi)發(fā)培訓(xùn)大神02-ui進(jìn)階0619手勢(shì)畫(huà)板15quartz2d_第3頁(yè)
開(kāi)發(fā)培訓(xùn)大神02-ui進(jìn)階0619手勢(shì)畫(huà)板15quartz2d_第4頁(yè)
開(kāi)發(fā)培訓(xùn)大神02-ui進(jìn)階0619手勢(shì)畫(huà)板15quartz2d_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Quartz2D掌握drawRect:方法的使用常見(jiàn)圖形的繪制:線(xiàn)條、多邊形、圓繪圖狀態(tài)的設(shè)置:文字顏色、線(xiàn)寬等圖形上下文狀態(tài)的保存與恢復(fù)(圖形上下文棧)圖片裁剪截圖什么是Quartz2DQuartz2D是一個(gè)二維繪圖引擎,同時(shí)支持iOS和Mac系統(tǒng)Quartz

2D能完成的工作繪制圖形:線(xiàn)條\三角形\矩形\圓\弧等繪制文字繪制\生成圖片(圖像)讀取\生成PDF截圖\裁剪圖片自定義UI控件…

…Quartz2D實(shí)例Quartz2D能做很多強(qiáng)大的事情,例如裁剪圖片圓形裁剪Quartz2D實(shí)例涂鴉\畫(huà)板Quartz2D實(shí)例手勢(shì)解鎖Quartz2D實(shí)例報(bào)表:折線(xiàn)圖\餅狀圖\柱狀圖Quartz2D在iOS開(kāi)發(fā)中的價(jià)值為了便于搭建美觀的UI界面,iOS提供了UIKit框架,里面有各種各樣的UI控件UILabel:顯示文字UIImageView:顯示圖片UIButton:同時(shí)顯示圖片和文字(能點(diǎn)擊)…

…利用UIKit框架提供的控件,拼拼湊湊,能搭建和現(xiàn)實(shí)一些簡(jiǎn)單、常見(jiàn)的UI界面但是,有些UI界面極其復(fù)雜、而且比較個(gè)性化,用普通的UI控件無(wú)法實(shí)現(xiàn),這時(shí)可以利用Quartz2D技術(shù)將控件內(nèi)部的結(jié)構(gòu)畫(huà)出來(lái),自定義控件的樣子其實(shí),iOS中大部分控件的內(nèi)容都是通過(guò)Quartz2D畫(huà)出來(lái)的因此,Quartz2D在iOS開(kāi)發(fā)中很重要的一個(gè)價(jià)值是:自定義view(自定義UI控件)圖形上下文圖形上下文(Graphics

Context):是一個(gè)CGContextRef類(lèi)型的數(shù)據(jù)圖形上下文的作用保存繪圖信息、繪圖狀態(tài)決定繪制的輸出目標(biāo)(繪制到什么地方去?)(輸出目標(biāo)可以是PDF文件、Bitmap或者顯示器的窗口上)相同的一套繪圖序列,指定不同的GraphicsContext,就可將相同的圖像繪制到不同的目標(biāo)上繪制好的圖形圖形上下文保存輸出目標(biāo)顯示圖形上下文Quartz2D提供了以下幾種類(lèi)型的GraphicsContext:Bitmap

GraphicsContextPDF

GraphicsContextWindow

GraphicsContextLayer

GraphicsContextPrinter

GraphicsContext自定義view如何利用Quartz2D自定義view?(自定義UI控件)如何利用Quartz2D繪制東西到view上?首先,得有圖形上下文,因?yàn)樗鼙4胬L圖信息,并且決定著繪制到什么地方去其次,那個(gè)圖形上下文必須跟view相關(guān)聯(lián),才能將內(nèi)容繪制到view上面自定義view的步驟新建一個(gè)類(lèi),繼承自UIView實(shí)現(xiàn)-(void)drawRect:(CGRect)rect方法,然后在這個(gè)方法中取得跟當(dāng)前view相關(guān)聯(lián)的圖形上下文繪制相應(yīng)的圖形內(nèi)容利用圖形上下文將繪制的所有內(nèi)容渲染顯示到view上面drawRect:為什么要實(shí)現(xiàn)drawRect:方法才能繪圖到view上?因?yàn)樵赿rawRect:方法中才能取得跟view相關(guān)聯(lián)的圖形上下文drawRect:方法在什么時(shí)候被調(diào)用?當(dāng)view第一次顯示到屏幕上時(shí)(被加到UIWindow上顯示出來(lái))調(diào)用view的setNeedsDisplay或者setNeedsDisplayInRect:時(shí)繪圖順序Quartz2D須知Quartz2D的API是純C語(yǔ)言的Quartz2D的API來(lái)自于Core

Graphics框架數(shù)據(jù)類(lèi)型和函數(shù)基本都以CG作為前綴CGContextRefCGPathRefCGContextStrokePath(ctx);……drawRect:中取得的上下文在drawRect:方法中取得上下文后,就可以繪制東西到view上View內(nèi)部有個(gè)layer(圖層)屬性,drawRect:方法中取得的是一個(gè)Layer

Graphics

Context,因此,繪制的東西其實(shí)是繪制到view的layer上去了View之所以能顯示東西,完全是因?yàn)樗鼉?nèi)部的layer25,25,50startA:0Angle:25/100.0*2*M_PiendA:startA

+

anglestartA:endAAngle:25/100.0*2*M_PiendA:startA

+

anglestartA:endAAngle:50/100.0*2*M_PiendA:startA

+

angleW

=

w

/

2n

1H

=

h*25

/

100.0X

=

I*2*w

Y

=

h

-

H25,25,50Quartz2D繪圖的代碼步驟獲得圖形上下文CGContextRefctx=UIGraphicsGetCurrentContext();拼接路徑(下面代碼是搞一條線(xiàn)段)CGContextMoveToPoint(ctx,10,10);CGContextAddLineToPoint(ctx,100,100);繪制路徑CGContextStrokePath(ctx);

//CGContextFillPath(ctx);常用拼接路徑函數(shù)新建一個(gè)起點(diǎn)void

CGContextMoveToPoint(CGContextRefc,CGFloatx,CGFloaty)添加新的線(xiàn)段到某個(gè)點(diǎn)void

CGContextAddLineToPoint(CGContextRefc,CGFloatx,CGFloaty)添加一個(gè)矩形void

CGContextAddRect(CGContextRefc,CGRectrect)添加一個(gè)橢圓void

CGContextAddEllipseInRect(CGContextRefcontext,CGRectrect)添加一個(gè)圓弧void

CGContextAddArc(CGContextRefc,CGFloatx,CGFloaty,

CGFloatradius,CGFloatstartAngle,CGFloatendAngle,intclockwise)常用繪制路徑函數(shù)Mode參數(shù)決定繪制的模式void

CGContextDrawPath(CGContextRefc,CGPathDrawingModemode)繪制空心路徑void

CGContextStrokePath(CGContextRefc)繪制實(shí)心路徑void

CGContextFillPath(CGContextRefc)提示:一般以CGContextDraw、CGContextStroke、CGContextFill開(kāi)頭的函數(shù),都是用來(lái)繪制路徑的圖形上下文棧的操作將當(dāng)前的上下文copy一份,保存到棧頂(那個(gè)棧叫做”圖形上下文棧”)void

CGContextSaveGState(CGContextRefc)將棧頂?shù)纳舷挛某鰲?替換掉當(dāng)前的上下文void

CGContextRestoreGState(CGContextRefc)矩陣操作利用矩陣操作,能讓繪制到上下文中的所有路徑一起發(fā)生變化縮放void

CGContextScaleCTM(CGContextRefc,CGFloatsx,CGFloatsy)旋轉(zhuǎn)void

CGContextRotateCTM(CGContextRefc,CGFloatangle)平移void

CGContextTranslateCTM(CGContextRefc,CGFloattx,CGFloatty)Quartz2D的內(nèi)存管理使用含有“Create”或“Copy”的函數(shù)創(chuàng)建的對(duì)象,使用完后必須釋放,否則將導(dǎo)致內(nèi)存泄露使用不含有“Create”或“Copy”的函數(shù)獲取的對(duì)象,則不需要釋放如果retain了一個(gè)對(duì)象,不再使用時(shí),需要將其release掉可以使用Quartz2D的函數(shù)來(lái)指定retain和release一個(gè)對(duì)象。例如,如果創(chuàng)建了一個(gè)CGColorSpace對(duì)象,則使用函數(shù)CGColorSpaceRetain和CGColorSpaceRelease來(lái)retain和release對(duì)象。也可以使用CoreFoundation的CFRetain和CFRelease。注意不能傳遞NULL值給這些函數(shù)圖片水印水?。涸趫D片上加的防止他人盜圖的半透明logo、文字、圖標(biāo)水印的作用告訴你這個(gè)圖片從哪來(lái)的主要是一些網(wǎng)站為了版權(quán)問(wèn)題、廣告而添加的上下文圖片水印有時(shí)候,在手機(jī)客戶(hù)端app中也需要用到水印技術(shù)比如,用戶(hù)拍完照片后,可以在照片上打個(gè)水印,標(biāo)識(shí)這個(gè)圖片是屬于哪個(gè)用戶(hù)的實(shí)現(xiàn)方式:利用Quartz2D,將水?。ㄎ淖?、LOGO)畫(huà)到圖片的右下角核心代碼開(kāi)啟一個(gè)基于位圖的圖形上下文void

UIGraphicsBeginImageContextWithOptions(CGSizesize,BOOLopaque,CGFloatscale)從上下文中取得圖片(UIImage)UIImage*UIGraphicsGetImageFromCurrentImageContext();結(jié)束基于位圖的圖形上下文void

UIGraphicsEndImageContext();圖片裁剪很多app的頭像,都是圓形的圖片裁剪這時(shí)需要把一張普通的圖片刻意裁剪成圓形核心代碼void

CGContextClip(CGContextRefc)將當(dāng)前上下所繪制的路徑裁剪出來(lái)(超出這個(gè)裁剪區(qū)域的都不能顯示)圓形裁剪上下文上下文開(kāi)啟比之前圖片大的上下文Border:1W:

imageW

+

2

*

borderH:imageH

+

2

*

border//

1.畫(huà)大圓形,尺寸跟上下文一致//

2.設(shè)置裁剪區(qū)域x,y=border,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論