溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Quartz2D會遇到什么問題

發(fā)布時間:2021-10-21 10:31:45 來源:億速云 閱讀:86 作者:小新 欄目:開發(fā)技術

這篇文章主要為大家展示了“使用Quartz2D會遇到什么問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“使用Quartz2D會遇到什么問題”這篇文章吧。

        這里交代一些作圖時可能遇到的問題:

問題一:當同時畫多條線時,在第一條線設置屬性后,后面畫的所有線都會延用這些屬性來繪制。

        其實解決的方法很簡答,就是在繪制一條新的線條時重置下繪制的屬性即可,比如,在畫第一條是的屬性設置是:

        CGContextSetLineWidth(ctx,12);    //線條寬度

        [[UIColor redColor]set];                   //線條顏色

        CGContextSetLineCap(ctx,kCGLineCapRound);    //端點樣式

        在繪制第二條線時不想要延用這個屬性繼續(xù)繪制,那么可以重置這些屬性:

        CGContextSetLineWidth(ctx,1);    

        [[UIColor blackColor]set];                   

        CGContextSetLineCap(ctx,kCGLineCapButt);   

        但是這樣就出現了新的問題,如果繪制的線條過多,每次到新的線條都要重置屬性,這樣操作起來就會非常麻煩。當然了,蘋果不可能沒想到這樣的問題,自然也有相應的解決方法了。不過在這之前我們要了解一個新的概念-----圖形上下文棧:用于保存圖形上下文的狀態(tài)。
        大體過程是:在設置完第一條線的繪制屬性前,我們先保存一份最純潔的圖形上下文(此時是沒有做過任何操作的圖形上下文),然后設置完第一條線,到第二條線之前,我們拿出之前保存的圖形上下文繪制,這樣第二條線繪制的屬性其實就是系統默認的屬性了。

        獲取完圖形上下文后,調用函數CGContextSaveGState(ctx);

在需要重置屬性的線條前面調用函數CGContextRestoreGState(ctx);即可

非常簡單的兩部,但是要說明的是,每次保存都是一份,調用一次之后就沒有了,如果要重置幾次就保存幾次,然后調用,如果調用次數大于保存次數會直接掛掉喲~

問題二:繪制矩形時如何讓矩形旋轉角度?

        這樣的情況我們在開發(fā)中可能會遇到,這個問題的解決就是使用系統自帶的函數即可。

        1、.....獲取上下文,然后

        2、CGContextRotateCTM(ctx,M_Pi_4);

        3、....設置繪制屬性

        4、....渲染

        以上方法用于旋轉角度的屬性設置,要注意的是:這里的旋轉不是將繪制的圖形旋轉,而是將整個layer旋轉,而所有的繪制都是在layer上進行的,所以這個函數要在繪制屬性設置之前就調用,不然無效。

        除了旋轉以外,還有縮放和平移。

        CGContextScaleCTM(ctx,x,y);    //縮放(x代表寬的倍數,y代表高的倍數)

        CGContextTranslateCTM(ctx,x,y);    //平移(x、y分別代表x、y上的偏移量)

問題三:如何讓繪制的圖片顯示成圓形?

        解決這個問題的思路:先畫一個圓形,把圖片繪制在這個圓里面,超出這個圓形范圍的部分不顯示。具體的代碼:

        1、獲取上下文...

        2、CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,50));    //畫一個圓心在(100,100),半徑為50的圓形

        //關鍵的一步

        3、CGContextClip(ctx);    //指定上下文中可以顯示內容的就是上面畫的圖形的范圍

        4、把圖片繪制到(100,100)的點即可。

        當然了,正式項目中根據不同的需求,可以讓圖片顯示在矩形、三角形或者其他各種形狀里。

以上是“使用Quartz2D會遇到什么問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI