您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“使用Quartz2D會遇到什么問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“使用Quartz2D會遇到什么問題”這篇文章吧。
這里交代一些作圖時可能遇到的問題:
問題一:當同時畫多條線時,在第一條線設置屬性后,后面畫的所有線都會延用這些屬性來繪制。
其實解決的方法很簡答,就是在繪制一條新的線條時重置下繪制的屬性即可,比如,在畫第一條是的屬性設置是:
CGContextSetLineWidth(ctx,12); //線條寬度
[[UIColor redColor]set]; //線條顏色
CGContextSetLineCap(ctx,kCGLineCapRound); //端點樣式
在繪制第二條線時不想要延用這個屬性繼續繪制,那么可以重置這些屬性:
CGContextSetLineWidth(ctx,1);
[[UIColor blackColor]set];
CGContextSetLineCap(ctx,kCGLineCapButt);
但是這樣就出現了新的問題,如果繪制的線條過多,每次到新的線條都要重置屬性,這樣操作起來就會非常麻煩。當然了,蘋果不可能沒想到這樣的問題,自然也有相應的解決方法了。不過在這之前我們要了解一個新的概念-----圖形上下文棧:用于保存圖形上下文的狀態。
大體過程是:在設置完第一條線的繪制屬性前,我們先保存一份最純潔的圖形上下文(此時是沒有做過任何操作的圖形上下文),然后設置完第一條線,到第二條線之前,我們拿出之前保存的圖形上下文繪制,這樣第二條線繪制的屬性其實就是系統默認的屬性了。
獲取完圖形上下文后,調用函數CGContextSaveGState(ctx);
在需要重置屬性的線條前面調用函數CGContextRestoreGState(ctx);即可
非常簡單的兩部,但是要說明的是,每次保存都是一份,調用一次之后就沒有了,如果要重置幾次就保存幾次,然后調用,如果調用次數大于保存次數會直接掛掉喲~
問題二:繪制矩形時如何讓矩形旋轉角度?
這樣的情況我們在開發中可能會遇到,這個問題的解決就是使用系統自帶的函數即可。
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會遇到什么問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。