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