swift繪圖簡(jiǎn)介

基本步驟就是:
1、獲取當(dāng)前繪圖上下文
2、設(shè)置筆觸顏色
3、設(shè)置筆觸寬度
4、設(shè)置填充顏色
5、然后就開始繪制了(當(dāng)然也是最復(fù)雜的地方了)

舉個(gè)??


class CircleImage: UIView {

    override func drawRect(rect: CGRect) {
        // Drawing code
        super.drawRect(rect)

        let ctx = UIGraphicsGetCurrentContext()

        // 設(shè)置筆觸顏色
        CGContextSetStrokeColorWithColor(ctx, UIColor.blackColor().CGColor)

        // 設(shè)置筆觸寬度
        CGContextSetLineWidth(ctx, 2)

        // 設(shè)置填充色

        CGContextSetFillColorWithColor(ctx, UIColor.purpleColor().CGColor)

        CGContextSetLineJoin(ctx, .Round)

        CGContextSetLineCap(ctx, .Round)

        guard ctx != nil else {
            return
        }
//        drawLine(ctx!)
        drawCircle(ctx!)
    }

假設(shè)現(xiàn)在要繪制一個(gè)圓,下面我們來(lái)實(shí)現(xiàn)這個(gè)drawCirlce


func drawCircle(ctx: CGContextRef) {

        // 第一種方式 在點(diǎn)(100,100)出繪制一個(gè)半徑為50的圓弧,角度從0到2pi,已順時(shí)針?lè)较?,這個(gè)最容易理解,不解釋。
        CGContextAddArc(ctx, 100, 100, 50, 0, CGFloat(M_PI), 1)
        CGContextFillPath(ctx)
        CGContextStrokePath(ctx) // 該代碼無(wú)效了

        // 第二種方式 ,設(shè)置起始點(diǎn)在(100,100),然后在繪制4段弧,分別是上左,上右,下右,下左,湊在一起實(shí)際上就是一個(gè)圓。這個(gè)就一批人放棄了
        // 因此需要解釋一下,我們只需要在UIKit坐標(biāo)系中,(注意是UIKit坐標(biāo)系)繪制出(100,100),(100,50),(150,20)這三個(gè)點(diǎn),
        // 然后依次連接起來(lái),顯然就形成了一個(gè)舉行的左上角形狀了,
        // 然后想象一個(gè)半徑為50的圓從矩形的中心慢慢移動(dòng)到矩形的左上角,等到擬合停止,上左段圓弧就出來(lái)了。
        // 依次。。4段圓弧都出來(lái)就是一個(gè)圓了
        // 那么問(wèn)題來(lái)了,如果半徑改為25,會(huì)出現(xiàn)什么圖形,自己腦補(bǔ),不會(huì)腦補(bǔ)就修改跑一下代碼好嗎?
        CGContextMoveToPoint(ctx, 100, 100);
        CGContextAddArcToPoint(ctx, 100, 50, 150, 50, 50);
        CGContextAddArcToPoint(ctx, 200, 50, 200, 100, 50)
        CGContextAddArcToPoint(ctx, 200, 150, 150, 150, 50)
        CGContextAddArcToPoint(ctx, 100, 150, 100, 100, 50)
        CGContextStrokePath(ctx);
//        CGContextFillPath(ctx)

        // 第三種方式,放一個(gè)矩形區(qū)域在那里,你在里面塞一個(gè)最大的橢圓出來(lái),當(dāng)矩形寬高相等,顯然,就是一個(gè)正圓了
        CGContextAddEllipseInRect(ctx, CGRectMake(200, 50 + 25, 50, 50))
        CGContextStrokePath(ctx);

        // 第四種方式,三階貝塞爾曲線抱歉,我并沒有畫出一個(gè)圓來(lái),數(shù)學(xué)能力有限,實(shí)際上 繪制出來(lái)的是一個(gè)橢圓而已
        CGContextMoveToPoint(ctx, 200, 200);
        CGContextAddCurveToPoint(ctx, 200, 100, 300, 100, 300, 200)
        CGContextAddCurveToPoint(ctx, 300, 300, 200, 300, 200, 200)
        CGContextStrokePath(ctx);

        // 第五種方式,二階貝塞爾曲線,抱歉,我依然沒有畫出一個(gè)圓來(lái),數(shù)學(xué)能力有限,實(shí)際上 繪制出來(lái)的是一個(gè)橄欖球
        CGContextMoveToPoint(ctx, 100, 300);
        CGContextAddQuadCurveToPoint(ctx, 200, 200, 300, 300)
        CGContextAddQuadCurveToPoint(ctx, 200, 400, 100, 300)
        CGContextStrokePath(ctx);

        // 大家喜歡吃??,我就用二階貝塞爾曲線繪制一個(gè)??吧,雖然比較簡(jiǎn)單,但是好像而已蠻像的,
        CGContextMoveToPoint(ctx, 200, 400);
        CGContextAddQuadCurveToPoint(ctx, 250, 355, 300, 400)
        CGContextAddQuadCurveToPoint(ctx, 250, 755, 200, 400)
        CGContextStrokePath(ctx);
    }

運(yùn)行后效果圖

效果圖.png

總結(jié)及問(wèn)題

本文介紹了使用swift繪圖相關(guān)的一些知識(shí),然后用繪制圓形的各種方式來(lái)舉例子說(shuō)明如何繪圖。
那么問(wèn)題來(lái)了?

  • drawRect是一個(gè)不被建議使用的api,為什么我們還是要用?為什么不推薦使用
  • 如果要你繪制一個(gè)圓角矩形,你如何做?
  • 如何繪制圓形圖片?
  • 如何給繪制的圓形圖片加上border?
  • CGContextFillPath(ctx); CGContextStrokePath(ctx) // 該代碼無(wú)效了,為什么后面一句代碼無(wú)效?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,698評(píng)論 6 30
  • Core Graphics Framework是一套基于C的API框架,使用了Quartz作為繪圖引擎。它提供了低...
    ShanJiJi閱讀 1,731評(píng)論 0 20
  • 互聯(lián)網(wǎng)產(chǎn)品經(jīng)理在工作中都離不開一些專業(yè)工具軟件的支持。現(xiàn)在針對(duì)產(chǎn)品經(jīng)理的工作需求和內(nèi)容,給大家分享一些比較實(shí)用的工...
    麥客CRM閱讀 1,558評(píng)論 1 32
  • 題目 TinyURL is a URL shortening service where you enter a ...
    Eazow閱讀 1,550評(píng)論 0 1
  • 小時(shí)候,月亮像銀盤, 或圓,或缺,總是按著日子 從從容容的來(lái)去。 小時(shí)候,家里養(yǎng)的狗 只為看家護(hù)院, 也還可與雞,...
    美麗979閱讀 362評(píng)論 1 4

友情鏈接更多精彩內(nèi)容