CAShapeLayer: ?CAShapeLayer繼承自CALayer潘懊,可以使用CALayer的所有屬性值邮辽,配合貝塞爾曲線(UIBezierPath)可以實現(xiàn)不在view的drawRect方法中畫出有一些想要的圖形,CAShapeLayer屬于CoreAnimation框架右冻,其動畫渲染直接提交到手機的GPU當中志珍,相較于view的drawRect方法使用CPU渲染而言鬼佣,其效率極高,能大大優(yōu)化內(nèi)存使用情況额获。
UIBezierPath: 使用UIBezierPath類可以創(chuàng)建基于矢量的路徑够庙,就是UIKit框架中,對繪圖的封裝抄邀,更加面向?qū)ο笤耪#瑢嶋H操作起來,用法與CGContextRef類似境肾,但是使用貝塞爾路徑剔难,更為方便。UIBezierPath常用的函數(shù)主要是下面幾個奥喻,(下圖二來自http://www.reibang.com/p/0e785269dccc)
CAShapeLayer 是基于UIBezierPath 才存在的偶宫,必須要結(jié)合UIBezierPath一起使用。貝塞爾曲線給CAShapeLayer提供路徑环鲤,CAShapeLayer在提供的路徑中進行渲染纯趋。路徑會閉環(huán),才能夠繪制出圖形冷离。下面舉兩個項目中會常用到的例子吵冒;
其他部分和正常定制cell一樣,畫圖就是把UIBezierPath的起始路徑移動到1點酒朵,[path moveToPoint:anglePoint];? 然后依次根據(jù)2桦锄,3,4蔫耽,5结耀,6留夜,7這幾個點加入路徑線段,[path addLineToPoint:CGPointMake( 0, cellH1)]; ? ?最后閉合[path closePath]; 其中被注釋的的部分是在黃色提示框四周加入了圓角图甜;
?#define JXDefaultHeight? ? 8.0? //尖角的高度
#define JXDefaultWidth? ? 5.0? //尖角的的半個寬度
#define JXDefaultRadius? 6.0? //弧度的半徑
#define cellH1? 45.0? //cell白色部分的高度
#define cellH2? 70.0? //cell白色部分的高度加上黃色部分的高度
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
這個頁面類似于微信聊天的起泡碍粥,但是他不是畫出來的,而是一個圖片黑毅;對圖片內(nèi)部進行拉伸嚼摩,保證他四周不變形;主要代碼就是下面的兩句話矿瘦,返回一張拉伸之后枕面,四周不變形的圖片,然后動態(tài)的去計算文字內(nèi)容的高度缚去,更改背景氣泡圖片的坐標大小