drawRect的绘制的使⽤(绘制⽂本字符、绘制图⽚、绘制图
形)
通过重写UIView的drawRect⽅法进⾏绘制使⽤,如绘制⽂本字符、绘制图⽚、绘制图形等。
在iOS中使⽤drawRect绘图⼀般分为以下5个步骤:
1、获取绘图上下⽂
CGContextRef context = UIGraphicsGetCurrentContext();
2、创建并设置路径
3、将路径添加到上下⽂
如:线宽、线条颜⾊、填充颜⾊等
4、设置上下⽂状态
CGContextAddLines(context, points, 2);
羸弱读音
或线
汽车底盘结构CGContextAddLineToPoint(context, 10.0, 10.0);
或圆
CGContextAddEllipInRect(context, CGRectZero);
CGContextAddArc(context, 10.0, 10.0, (60.0 * M_PI / 180.0), (120.0 * M_PI / 180.0), 1);
或弧
CGContextAddArcToPoint(context, 10.0, 200.0, 300.0, 200.0, 100.0);
或⼆次曲线
CGContextAddQuadCurveToPoint(context, 50.0, 80.0, 200.0, 10.0);
或三次曲线
CGContextAddCurveToPoint(context, 250, 280, 250, 400, 280.0, 300.0);
5、绘制路径
CGContextDrawPath(context, kCGPathFillStroke);
或
CGContextStrokePath(context);
6、释放路径
CGPathRelea(path);
注意事项:
1、设置frame的属性,或调⽤tNeedsDisplay时才会调⽤drawRect⽅法。
2、在绘制过程中
(1)针对实际情况获取图形上下⽂
CGContextRef context = UIGraphicsGetCurrentContext();
(2)有时候,还需要在获取图形上下⽂之前,设置开始图形上下⽂;在使⽤后,设置关闭图形上下⽂UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0); // 开始图形上下⽂
CGContextRef context = UIGraphicsGetCurrentContext();
//
UIGraphicsEndImageContext(); // 关闭上下⽂
3、
1、绘制⽂本
- (void)drawRect:(CGRect)rect
{
NSString *text = @"devZhang is an iOS developer.iOS开发者 iOS开发者 iOS开发者 iOS开发者 iOS开发者";
// ⽂本段落样式
NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle alloc] init];
textStyle.lineBreakMode = NSLineBreakByWordWrapping; // 结尾部分的内容以……⽅式省略 ( "...wxyz" ,"" ,"ab...yz")
textStyle.alignment = NSTextAlignmentLeft; //(两端对齐的)⽂本对齐⽅式:(左,中,右,两端对齐,⾃然)
textStyle.lineSpacing = 5; // 字体的⾏间距
textStyle.firstLineHeadIndent = 5.0; // ⾸⾏缩进
textStyle.headIndent = 0.0; // 整体缩进(⾸⾏除外)
textStyle.tailIndent = 0.0; //
textStyle.minimumLineHeight = 20.0; // 最低⾏⾼
textStyle.maximumLineHeight = 20.0; // 最⼤⾏⾼
textStyle.paragraphSpacing = 15; // 段与段之间的间距
textStyle.paragraphSpacingBefore = 22.0f; // 段⾸⾏空⽩空间/* Distance between the bottom of the previous paragraph (or the end of its paragraphSpacing, if a textStyle.baWritingDirection = NSWritingDirectionLeftToRight; // 从左到右的书写⽅向(⼀共➡ 三种)
textStyle.lineHeightMultiple = 15; /* Natural line height is multiplied by this factor (if positive) before being constrained by minimum and maximum line height. */ textStyle.hyphenationFactor = 1; //连字属性在iOS,唯⼀⽀持的值分别为0和1
// ⽂本属性
NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] init];
// NSParagraphStyleAttributeName 段落样式
[textAttributes tValue:textStyle forKey:NSParagraphStyleAttributeName];
// NSFontAttributeName 字体名称和⼤⼩
[textAttributes tValue:[UIFont systemFontOfSize:12.0] forKey:NSFontAttributeName];
// NSForegroundColorAttributeNam 颜⾊
[textAttributes tValue:[UIColor redColor] forKey:NSForegroundColorAttributeName];
// 绘制⽂字
[text drawInRect:rect withAttributes:textAttributes];
}
2、绘制图⽚
// 绘制图⽚
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
// 保存初始状态
CGContextSaveGState(context);
// 图形上下⽂移动{x,y}
CGContextTranslateCTM(context, 50.0, 30.0);
// 图形上下⽂缩放{x,y}
CGContextScaleCTM(context, 0.8, 0.8);
/
/ 旋转
CGContextRotateCTM(context, M_PI_4 / 4);
// 绘制图⽚
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
CGRect rectImage = CGRectMake(0.0, 0.0, rect.size.width, (rect.size.width * image.size.height / image.size.width));
// 圆⾓图⽚设置
// UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0); // 开始图形上下⽂
// CGContextRef ctx = UIGraphicsGetCurrentContext(); // 获得图形上下⽂
// CGRect rectNew = CGRectMake(0, 0, rect.size.width, rect.size.height); // 设置⼀个范围
// CGContextAddEllipInRect(ctx, rect); // 根据⼀个rect创建⼀个椭圆
// CGContextClip(ctx); // 裁剪
// [image drawInRect:rectNew]; // 将原照⽚画到图形上下⽂
// image = UIGraphicsGetImageFromCurrentImageContext(); // 从上下⽂上获取剪裁后的照⽚
// UIGraphicsEndImageContext(); // 关闭上下⽂
// 绘制图⽚
// 1 图⽚可能显⽰不完整
// [image drawAtPoint:CGPointMake(0, 0)];
// 2 在rect范围内完整显⽰图⽚-正常使⽤
[image drawInRect:rectImage];
// 3 图⽚上下颠倒了
// CGContextRef context = UIGraphicsGetCurrentContext();
/
/ CGContextDrawImage(context, rectImage, image.CGImage);
// 4 图⽚上下颠倒了-n个显⽰
// CGContextRef context = UIGraphicsGetCurrentContext();
// CGContextDrawTiledImage(context, rectImage, image.CGImage);
// 恢复到初始状态
CGContextRestoreGState(context);
}
3、绘制图形
乐于做某事的英文(1)菱形、矩形、正⽅形
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();武成帝
// 画⼀个菱形-实线带边框,带填充
// 边框
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor magentaColor].CGColor);
// ⽅法1 菱形起点-终点
// CGContextMoveToPoint(context, 10.0, 80.0);
// CGContextAddLineToPoint(context, 60.0, 10.0);
// CGContextAddLineToPoint(context, 110.0, 80.0);
// CGContextAddLineToPoint(context, 60.0, 150.0);
// CGContextAddLineToPoint(context, 10.0, 80.0);
// ⽅法2 菱形起点-终点
北周CGPoint points[5] = {CGPointMake(10.0, 80.0), CGPointMake(60.0, 10.0), CGPointMake(110.0, 80.
0), CGPointMake(60.0, 150.0), CGPointMake(10.0, 80.0)}; CGContextAddLines(context, points, 5);
// 填充
CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
// 绘制路径及填充模式
CGContextDrawPath(context, kCGPathFillStroke);
// 画⼀个菱形-虚线带边框,⽆填充
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGFloat dashArray[] = {4, 4}; // 表⽰先画1个点再画4个点(前者⼩后者⼤时,虚线点⼩且间隔⼤;前者⼤后者⼩时,虚线点⼤且间隔⼩)
CGContextSetLineDash(context, 1, dashArray, 2); // 其中的2表⽰dashArray中的值的个数
轻轻操视频
// 菱形起点-终点
CGPoint pointsStroke[5] = {CGPointMake(120.0, 80.0), CGPointMake(170.0, 10.0), CGPointMake(220.0, 80.0), CGPointMake(170.0, 150.0), CGPointMake(12 CGContextAddLines(context, pointsStroke, 5);
// ⽅法1 绘制路径及填充模式
// CGContextDrawPath(context, kCGPathStroke);
// ⽅法2 绘制路径
CGContextStrokePath(context);
// 画⼀个菱形-⽆边框,带填充
CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
// 菱形起点-终点
CGPoint pointsFill[5] = {CGPointMake(230.0, 80.0), CGPointMake(260.0, 10.0), CGPointMake(290.0,
80.0), CGPointMake(260.0, 150.0), CGPointMake(230.0, CGContextAddLines(context, pointsFill, 5);
// ⽅法1 绘制路径及填充模式
CGContextDrawPath(context, kCGPathFill);
// 通过frame的宽⾼区分正⽅形,矩形
// 画⼀个正⽅形-带边框,带填充
// 边框
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
// 正⽅形起点-终点
CGPoint pointsRect[5] = {CGPointMake(10.0, 160.0), CGPointMake(60.0, 160.0), CGPointMake(60.0, 210.0), CGPointMake(10.0, 210.0), CGPointMake(10.0, CGContextAddLines(
context, pointsRect, 5);
// 填充
CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
// 绘制路径及填充模式
CGContextDrawPath(context, kCGPathFillStroke);
// 画⼀个正⽅形-带边框,⽆填充
// 边框
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
// ⽅法1 正⽅形起点-终点
// CGPoint pointsRect2[5] = {CGPointMake(70.0, 160.0), CGPointMake(120.0, 160.0), CGPointMa
ke(120.0, 210.0), CGPointMake(70.0, 210.0), CGPointMake(7 // CGContextAddLines(context, pointsRect2, 5);
// ⽅法2
// CGContextAddRect(context, CGRectMake(70.0, 160.0, 50.0, 50.0));
// ⽅法3
CGContextStrokeRect(context, CGRectMake(70.0, 160.0, 50.0, 50.0));
// ⽅法1 绘制路径及填充模式
// CGContextDrawPath(context, kCGPathStroke);
// ⽅法2 绘制路径
CGContextStrokePath(context);
// 画⼀个正⽅形-⽆边框,带填充
CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
// ⽅法1 填充
// CGContextFillRect(context, CGRectMake(130.0, 160.0, 50.0, 50.0));
// ⽅法2
CGContextAddRect(context, CGRectMake(130.0, 160.0, 50.0, 50.0));
CGContextDrawPath(context, kCGPathFill);
// 画⼀个矩形-带边框,带填充
// 边框
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor brownColor].CGColor);
// 矩形起点-终点
CGPoint pointsRectangle[5] = {CGPointMake(10.0, 220.0), CGPointMake(80.0, 220.0), CGPointMak
e(80.0, 270.0), CGPointMake(10.0, 270.0), CGPointMake( CGContextAddLines(context, pointsRectangle, 5);
// 填充
CGContextSetFillColorWithColor(context, [UIColor orangeColor].CGColor);
// 绘制路径及填充模式
CGContextDrawPath(context, kCGPathFillStroke);
// 画⼀个矩形-带边框,⽆填充
// 边框
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
// ⽅法1 正⽅形起点-终点
/destroyed
/ CGPoint pointsRect2[5] = {CGPointMake(90.0, 220.0), CGPointMake(160.0, 220.0), CGPointMake(160.0, 270.0), CGPointMake(90.0, 270.0), CGPointMake(9 // CGContextAddLines(context, pointsRect2, 5);
高考语文试题// ⽅法2
// CGContextAddRect(context, CGRectMake(90.0, 220.0, 70.0, 50.0));
// ⽅法3
CGContextStrokeRect(context, CGRectMake(90.0, 220.0, 70.0, 50.0));
// ⽅法1 绘制路径及填充模式