Quartz2D之著色器使用初步

2022-04-03 07:22:17 字數 1656 閱讀 8051

上一講談到了如何使用cggradient來做線性漸變效果。那麼本講將介紹如何使用cgshader來做線性漸變效果。

使用著色器製作漸變的方法與直接用quartz提供的cggradient方法類似:

1、首先建立色彩空間

2、建立乙個函式物件。該物件包含了輸入範圍資訊以及輸出範圍資訊。

3、建立著色器物件。建立著色器物件時也指定了所要繪製矩形的起點座標與終點座標。

4、繪製

**如下:

//

// myquartzview.m

// quartztest

//// created by zenny_chen on 12-2-21.

//#import "myquartzview.h"

// quartz2d以及core animation所需要的標頭檔案

#import @implementation myquartzview

- (id)initwithframe:(cgrect)frame

return self;

}static void myshaderprocedure(void *info, const cgfloat *in, cgfloat *out)

// only override drawrect: if you perform custom drawing.

// an empty implementation adversely affects performance during animation.

- (void)drawrect:(cgrect)rect

;

// 建立函式物件

cgfunctionref funcref = cgfunctioncreate(null, // 將info置空

1, // 1個輸入元素(每個元素為2個分量來表示區間)

(cgfloat),

4, // 4個輸出元素

(cgfloat),

&callbacks);

// 建立色彩空間物件

cgcolorspaceref colorspaceref = cgcolorspacecreatedevicergb();

// 建立著色器物件

cgshadingref shadingref = cgshadingcreateaxial(colorspaceref,

cgpointmake(0.0f, 0.0f), // 起點座標

cgpointmake(320.0f, 460.0f), // 終點座標

funcref, false, false);

// 釋放色彩空間物件

cgcolorspacerelease(colorspaceref);

// 釋放函式物件

cgfunctionrelease(funcref);

// 繪製著色漸變

cgcontextdrawshading(context, shadingref);

// 釋放著色器物件

cgshadingrelease(shadingref);

}@end

從效果上我們可以看出,利用著色器做線性漸變仍然是以乙個45度軸為基礎進行漸變操作的。上述**將產生乙個從上到下的,暗灰、白到灰白的45度斜條。

Quartz 2D 簡單使用

想要在uiview內部繪製一下東西,需要自定義uiview,並且實現uiview的 void drawrect cgrect rect方法,為什麼需要實現drawrect 方法才能繪圖到 view 上,是因為在 drawrect 方法中才能取得跟 view 相關聯的圖形上下文,那麼什drawrect...

Quartz2D之漸變使用初步

quartz2d提供了兩種漸變填充方法。第一種是使用quartz自帶的gradient填充方法 第二種是使用自定義的著色器。這裡將先描述如何使用cggradient物件來做漸變填充。drawing code 建立quartz上下文 cgcontextref context uigraphicsget...

Quartz2D之漸變使用初步

quartz2d提供了兩種漸變填充方法。第一種是使用quartz自帶的gradient填充方法 第二種是使用自定義的著色器。這裡將先描述如何使用cggradient物件來做漸變填充。drawing code 建立quartz上下文 cgcontextref context uigraphicsget...