第一:通過(guò)路徑來(lái)畫(huà)圖 - 步驟 -- 這個(gè)是比較復(fù)雜的方式
//0. 找到圖形上下文-Context (所有的路徑都要畫(huà)到圖形上下文中)
CGContextRefcontext = UIGraphicsGetCurrentContext();
//1.創(chuàng)建一個(gè)可變的路徑
CGMutablePathRef mutablePath =CGPathCreateMutable();
//2. 在該可變路徑中添加了一個(gè)矩形路徑
CGPathAddRect(mutablePath, nil, CGRectMake(100, 100,100, 100));
//3.將該可變路徑添加到上下文
CGContextAddPath(context, mutablePath);
//
4.-------- 將路徑繪制出來(lái)draw (上下文負(fù)責(zé)) --------
CGContextDrawPath(context, kCGPathStroke);
//5.關(guān)閉路徑
CGPathRelease(mutablePath);
第二種畫(huà)矩形的方式
//這種方式不需要關(guān)閉路徑
CGContextRefcontext = UIGraphicsGetCurrentContext();
CGContextAddRect(context, CGRectMake(100, 100, 150, 150));
CGContextDrawPath(context, kCGPathStroke);
/**
1. 當(dāng)我們需要自定義繪制的內(nèi)容時(shí), 重寫(xiě)drawRect: 方法(不能直接調(diào)用drawRect:)
2. 當(dāng)我們需要刷新界面的內(nèi)容(重新繪制時(shí)), 調(diào)用setNeedsDisplay方法
*/
- (void)setTitle:(NSString *)title{
_title = title;
//重新調(diào)用drawRect
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect{
// [@"zhoushujian" drawInRect:CGRectMake(100, 100, 100, 23)
withAttributes:nil];
// [self drawImage:rect];
}
繪圖片
- (void)drawImage:(CGRect)rect{
//圖片的繪制
//確定圖片的size,在該size當(dāng)中進(jìn)行繪制
UIImage*image = [UIImage imageNamed:@"帥哥.jpg"];
//對(duì)圖片進(jìn)行繪制,drawInRect:會(huì)對(duì)圖片進(jìn)行拉伸,
[imagedrawInRect:CGRectMake(100, 100,image.size.width,image.size.height)];
NSString*context = @"云霞寶寶,我想你";
NSMutableParagraphStyle*paragraph = [NSMutableParagraphStyle new];
//居中對(duì)齊
paragraph.alignment= NSTextAlignmentCenter;
NSDictionary *dict = @{
NSFontAttributeName:[UIFont
systemFontOfSize:20],
NSForegroundColorAttributeName:[UIColor redColor];
NSParagraphStyleAttributeName:paragraph
};
[context drawInRect:CGRectMake(0, 280, rect.size.width,
rect.size.height)
withAttributes:dict];
}
字符串繪制
- (void)drawString:(CGRect)rect{
//字符串的繪制
NSString*context = @"好好學(xué)習(xí),天天上炕";
NSShadow *shadow = [NSShadow
new];
//陰影偏移量,陰影顏色
shadow.shadowOffset = CGSizeMake(50, 50);
shadow.shadowColor = [UIColor
grayColor];
//高斯模糊
shadow.shadowBlurRadius= 5;
//創(chuàng)建一個(gè)段落
NSMutableParagraphStyle*paragraph = [NSMutableParagraphStyle new];
//文本居中對(duì)齊
paragraph.alignment= NSTextAlignmentCenter;
//最常用的幾個(gè)屬性: 前景色, 字體類(lèi)型, 段落樣式(文本居中對(duì)齊):用字典
NSDictionary *dict = @{
//設(shè)置文本字體類(lèi)型
NSFontAttributeName:[UIFont systemFontOfSize:35],
//設(shè)置字體顏色
NSForegroundColorAttributeName:[UIColor redColor];
//段落樣式
NSParagraphStyleAttributeName:paragraph,
//設(shè)置背影
NSShadowAttributeName:shadow,
//配置背影描邊顏色
NSStrokeColorAttributeName:[UIColor grayColor]
};
[context drawInRect:CGRectMake(0, 200, rect.size.width,400) withAttributes:dict];
}
畫(huà)一個(gè)測(cè)試效果
- (void)drawTest{
CGContextRefcontext = UIGraphicsGetCurrentContext();
//設(shè)置顏色
[[UIColor redColor] set];
//寬度
CGContextSetLineWidth(context, 50);
//設(shè)置線段頂點(diǎn)樣式
CGContextSetLineCap(context, kCGLineCapRound);
//設(shè)置連接點(diǎn)的樣式
CGContextSetLineJoin(context, kCGLineJoinRound);
//設(shè)置陰影狀態(tài) 最后一個(gè)參數(shù)是模糊值,
CGContextSetShadow(context, CGSizeMake(50, 50), 10);
//畫(huà)起點(diǎn)
CGContextMoveToPoint(context, 100, 100);
//畫(huà)線
CGContextAddLineToPoint(context, 200, 200);
//渲染
CGContextDrawPath(context, kCGPathStroke);
//設(shè)置另一根線的顏色
[[UIColor blueColor] set];
//設(shè)置另一根線
CGContextMoveToPoint(context, 200, 200);
CGContextAddLineToPoint(context,200, 100);
//封閉路徑
//CGContextClosePath(context);
//渲染
CGContextDrawPath(context, kCGPathStroke);
}
虛線
- (void)drawXuXian{
// [self drawJuXing];
CGContextRefcontext = UIGraphicsGetCurrentContext();
//設(shè)置線條寬度
CGContextSetLineWidth(context, 50);
//設(shè)置起點(diǎn)
CGContextMoveToPoint(context, 100, 100);
//連線
CGContextAddLineToPoint(context, 300, 100);
//創(chuàng)建一個(gè)數(shù)組
CGFloat length[] = {4,6,5,6,8,9};
/**
* 虛線開(kāi)始繪制的地方, 距離起始位置20
* 虛線獲取的間隙, 數(shù)組
* 數(shù)組的個(gè)數(shù)
*/
CGContextSetLineDash(context,0, length, 6);
//渲染
CGContextDrawPath(context, kCGPathStroke);
}
畫(huà)矩形
- (void)drawJuXing{
//0.找到圖形上下文-Context (所有的路徑都要畫(huà)到圖形上下文中)
CGContextRefcontext = UIGraphicsGetCurrentContext();
//描邊顏色
[[UIColor redColor] setFill];
//1.創(chuàng)建一個(gè)可變的路徑
CGMutablePathRef mutablePath =CGPathCreateMutable();
//2.在該可變路徑中添加了一個(gè)矩形路徑
CGPathAddRect(mutablePath, nil, CGRectMake(100, 100,100, 100));
//3.將該可變路徑添加到上下文
CGContextAddPath(context, mutablePath);
//
4.-------- 將路徑繪制出來(lái)draw (上下文負(fù)責(zé)) --------
CGContextDrawPath(context, kCGPathFill);
//5.關(guān)閉路徑
CGPathRelease(mutablePath);
/*第二種方式畫(huà)矩形
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddRect(context, CGRectMake(100, 100, 150, 150));
CGContextDrawPath(context, kCGPathStroke);
*/
/*
//畫(huà)兩個(gè)矩形,描述奇偶填充
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddRect(context, CGRectMake(50, 50, 200, 300));
CGContextAddRect(context, CGRectMake(100, 100, 200, 300));
CGContextDrawPath(context, kCGPathEOFillStroke);
*/
}
畫(huà)圓弧
- (void)drawYuanHu{
//畫(huà)圓弧
//0 ,找到圖形上下文-context
//-------- 繪制弧線(橢圓, 再確定角度, 就可以裁剪出弧線)--------
//* Quartz 2D 最初是為macOS而設(shè)計(jì), 后繼再引用到iOS
//* Quartz 2D 的坐標(biāo)系是以左下解為原點(diǎn), 而UIKit是以左上角為原點(diǎn)
//* 沿X軸是翻譯過(guò)來(lái)的
/**
* 繪制弧線
* x 與y 確定圓心
* raduis 確定半徑
* startAngle 與endAngle 確定了弧度度數(shù)
* clockwise 順逆時(shí)針, 1順時(shí)針, 0是逆時(shí)針
*/
CGContextRefcontext = UIGraphicsGetCurrentContext();
CGContextAddArc(context, 200,
200, 100,
M_PI*2,M_PI_2, 0);
CGContextDrawPath(context, kCGPathStroke);
}
畫(huà)圓
- (void)drawYuan{
//0.找到圖形上下文-Context (所有的路徑都要畫(huà)到圖形上下文中)
CGContextRefcontext = UIGraphicsGetCurrentContext();
//1.路徑
CGContextAddEllipseInRect(context, CGRectMake(100, 100, 100, 150));
//2.將路徑繪制出來(lái)
CGContextDrawPath(context, kCGPathStroke);
/*
typedef CF_ENUM (int32_t, CGPathDrawingMode) {
kCGPathFill, 填充
kCGPathEOFill, 奇偶填充
kCGPathStroke, 描邊
kCGPathFillStroke, 既描邊又填充
kCGPathEOFillStroke ,奇偶填充
};
*/
}
畫(huà)線
- (void)drawLine{
CGContextRefcontext = UIGraphicsGetCurrentContext();
//1. 確定起點(diǎn)(移動(dòng)到某個(gè)點(diǎn))
CGContextMoveToPoint(context, 100, 100);
//2. 連接當(dāng)前點(diǎn)到起點(diǎn)
CGContextAddLineToPoint(context, 200, 200);
//3. 再畫(huà)一條線
CGContextAddLineToPoint(context, 100, 300);
CGContextAddLineToPoint(context, 0, 200);
//關(guān)閉路徑就是形成一個(gè)回路-如果不關(guān)閉的話,就是一個(gè)開(kāi)路
CGContextClosePath(context);
//渲染
CGContextDrawPath(context, kCGPathStroke);
}