模式填充凛篙,類似瓷磚效果宪郊;
創(chuàng)建
- 設(shè)置回調(diào)
// 繪制 回調(diào)
void drawPatternCallback(void *info, CGContextRef context) {
//有顏色填充双炕,這里設(shè)置填充色
CGContextFillRect(context, CGRectMake(0, 0, TILE_SIZE, TILE_SIZE));// 需要填充顏色的 位置
CGContextFillRect(context, CGRectMake(TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE));// 同上
}
// 移除 回調(diào)
void releaseInfoCallback(void *info) {
// 一般 傳 NULL
}
- 設(shè)置模式
//填充模式回調(diào)函數(shù)結(jié)構(gòu)體
CGPatternCallbacks callback={0,&drawPatternCallback, &releaseInfoCallback};
/*填充模式
info://傳遞給callback的參數(shù)
bounds:瓷磚大小
matrix:形變
xStep:瓷磚橫向間距
yStep:瓷磚縱向間距
tiling:貼磚的方法(瓷磚擺放的方式)
isClored:繪制的瓷磚是否已經(jīng)指定了顏色(對(duì)于無(wú)顏色瓷磚此處指定位false)
callbacks:回調(diào)函數(shù)
*/
CGPatternRef pattern=CGPatternCreate(NULL,
CGRectMake(0, 0, 2*TILE_SIZE, 2*TILE_SIZE),
CGAffineTransformIdentity,
2*TILE_SIZE+ 5,
2*TILE_SIZE+ 5,
kCGPatternTilingNoDistortion,
false,
&callback);
/*
typedef CF_ENUM (int32_t, CGPatternTiling) {
kCGPatternTilingNoDistortion,
kCGPatternTilingConstantSpacingMinimalDistortion,
kCGPatternTilingConstantSpacing
};
*/
操作
CG_EXTERN CGPatternRef __nullable CGPatternRetain(CGPatternRef __nullable pattern)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
CG_EXTERN void CGPatternRelease(CGPatternRef __nullable pattern)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
實(shí)際使用
結(jié)合 Context 繪制袖肥,區(qū)分有色填充與無(wú)色填充(感覺(jué)沒(méi)有大差別)
- 1 有色填充
#pragma mark - 有顏色填充模式
// 繪制 回調(diào)
void drawPatternCallback(void *info,CGContextRef context){
//有顏色填充,這里設(shè)置填充色
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);// 設(shè)置填充顏色
CGContextFillRect(context, CGRectMake(0, 0, TILE_SIZE, TILE_SIZE));// 設(shè)置填充位置
CGContextFillRect(context, CGRectMake(TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE));// 同上
}
// 移除 回調(diào)
void releaseInfoCallback(void *info) {
// 一般 傳 NULL
}
// 傳入 context 繪制
-(void)drawBackgroundWithColoredPattern:(CGContextRef)context{
//模式填充顏色空間,注意對(duì)于有顏色填充模式棋电,這里傳NULL
CGColorSpaceRef colorSpace = CGColorSpaceCreatePattern(NULL);
//將填充色顏色空間設(shè)置為模式填充的顏色空間
CGContextSetFillColorSpace(context, colorSpace);
//填充模式回調(diào)函數(shù)結(jié)構(gòu)體
CGPatternCallbacks callback={0, &drawPatternCallback, &releaseInfoCallback};
/*填充模式
info://傳遞給callback的參數(shù)
bounds:瓷磚大小
matrix:形變
xStep:瓷磚橫向間距
yStep:瓷磚縱向間距
tiling:貼磚的方法
isClored:繪制的瓷磚是否已經(jīng)指定了顏色(對(duì)于有顏色瓷磚此處指定位true)
callbacks:回調(diào)函數(shù)
*/
CGPatternRef pattern = CGPatternCreate(NULL,
CGRectMake(0, 0, 2 * TILE_SIZE, 2 * TILE_SIZE),
CGAffineTransformIdentity,
2 * TILE_SIZE,
2 * TILE_SIZE,
kCGPatternTilingNoDistortion,
true,
&callback);
CGFloat alpha=1;
//注意最后一個(gè)參數(shù)對(duì)于有顏色瓷磚指定為透明度的參數(shù)地址茎截,對(duì)于無(wú)顏色瓷磚則指定當(dāng)前顏色空間對(duì)應(yīng)的顏色數(shù)組
CGContextSetFillPattern(context, pattern, &alpha);
// 繪制大小
UIRectFill(CGRectMake(0, 0, 60, 60));
// 移除
CGColorSpaceRelease(colorSpace);
CGPatternRelease(pattern);
}
- 2 無(wú)色填充
#pragma mark - 無(wú)顏色填充模式
// 繪制 回調(diào)
void drawPatternCallback(void *info, CGContextRef context) {
// 因?yàn)槭菬o(wú)色填充,這里只能設(shè)置后續(xù)填充的位置
CGContextFillRect(context, CGRectMake(0, 0, TILE_SIZE, TILE_SIZE));// 需要填充顏色的 位置
CGContextFillRect(context, CGRectMake(TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE));// 同上
}
// 移除 回調(diào)
void releaseInfoCallback(void *info) {
// 一般 傳 NULL
}
-(void)drawBackgroundWithPattern:(CGContextRef)context{
//設(shè)備無(wú)關(guān)的顏色空間(就是后面用于填充的顏色空間)
CGColorSpaceRef rgbSpace= CGColorSpaceCreateDeviceRGB();
//模式填充顏色空間
CGColorSpaceRef colorSpace=CGColorSpaceCreatePattern(rgbSpace);
//將填充色顏色空間設(shè)置為模式填充的顏色空間
CGContextSetFillColorSpace(context, colorSpace);
//填充模式回調(diào)函數(shù)結(jié)構(gòu)體
CGPatternCallbacks callback={0, &drawPatternCallback, &releaseInfoCallback};
/*填充模式
info://傳遞給callback的參數(shù)
bounds:瓷磚大小
matrix:形變
xStep:瓷磚橫向間距
yStep:瓷磚縱向間距
tiling:貼磚的方法(瓷磚擺放的方式)
isClored:繪制的瓷磚是否已經(jīng)指定了顏色(對(duì)于無(wú)顏色瓷磚此處指定位false)
callbacks:回調(diào)函數(shù)
*/
CGPatternRef pattern=CGPatternCreate(NULL,
CGRectMake(0, 0, 2 * TILE_SIZE, 2 * TILE_SIZE),
CGAffineTransformIdentity,
2 * TILE_SIZE,
2 * TILE_SIZE,
kCGPatternTilingNoDistortion,
false,
&callback);
CGFloat components[]={1.0, 0.0, 0.0, 1.0};
//注意最后一個(gè)參數(shù)對(duì)于無(wú)顏色填充模式指定為當(dāng)前顏色空間顏色數(shù)據(jù)
CGContextSetFillPattern(context, pattern, components);
// 繪制大小
UIRectFill(CGRectMake(0, 0, 60, 60));
// 移除
CGColorSpaceRelease(rgbSpace);
CGColorSpaceRelease(colorSpace);
CGPatternRelease(pattern);
}
1