Quartz2D 画图学习

本文详细介绍了如何使用Quartz2D自定义视图进行图形绘制,包括直线、图形、圆形、文字和图片的绘制方法,以及颜色、线条宽度、线端样式等属性的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Quartz2D

自定义View
1、新建一个类,继承UIView
2、实现 - (void)drawRect:(CGRect)rect方法,然后在这个方法中
	2-1、取得跟当前View相关联的图形上下文
	2-2、绘制相应的图形内容
	2-3、利用图形上下文将绘制的所有内容渲染显示到View上面

CGContextStrokePath  空心
CGContextFillPath    实心
CGContextSetLineWidth(ctx, 10);//设置线宽
CGContextSetLineCap(ctx, kCGLineCapRound);//设置直线俩端是圆形
CGContextSetLineJoin(ctx, kCGLineJoinBevel);//设置转折点也为弧形,切除尖角

//设置颜色的多种方法
CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1);//设置颜色
[[UIColor blueColor] setStroke];//设置颜色,这里设置实心和空心
[[UIColor blueColor] set];//设置位蓝色,通用


///////////////////////////////////////////////////////////////
案例一:
画直线
/**
 *  自定义View画图
 *  这里采用的是纯C语言语法
 *  采用框架都是CG开头
 */
- (void)drawRect:(CGRect)rect
{
    //1、取得跟当前View相关联的图形上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //2、绘制相应的图形内容
    
    //2-1、设置一条直线
    CGContextMoveToPoint(ctx, 0, 0);//设置一个起点
    CGContextAddLineToPoint(ctx, 100, 100);//添加一条线段
    CGContextAddLineToPoint(ctx, 100, 120);//连接上面一条直线
    
    //3、利用图形上下文将绘制的所有内容渲染显示到View上面
    CGContextStrokePath(ctx);
}
///////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////
案例二:画图形

#import "ShapeView.h"

@implementation ShapeView

/**
 * 画图形
 */
-(void)drawRect:(CGRect)rect
{
    //drawLine();
    drawTriangle();
    //draw4Rect();
}

/**
 *  画直线
 */
void drawLine()
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //画直线
    CGContextMoveToPoint(ctx, 20, 20);
    CGContextAddLineToPoint(ctx, 100, 100);
    
    CGContextAddLineToPoint(ctx, 10, 130);
    
    CGContextSetLineWidth(ctx, 10);
    CGContextSetLineCap(ctx, kCGLineCapRound);//设置直线俩端是弧形
    CGContextSetLineJoin(ctx, kCGLineJoinBevel);//设置转折点也为弧形,切除尖角
    
    CGContextStrokePath(ctx);//空心
}

/**
 *  画三角形
 */
void drawTriangle()
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //2、画三角形
    CGContextMoveToPoint(ctx, 0, 0);
    CGContextAddLineToPoint(ctx, 100, 100);
    CGContextAddLineToPoint(ctx, 150, 80);
    CGContextClosePath(ctx);
    
    CGContextSetLineWidth(ctx, 10);//设置线宽
    
    //设置颜色
    //CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1);
    //[[UIColor blueColor] setStroke];
    [[UIColor blueColor] set];
    
    CGContextStrokePath(ctx);//空心
    //CGContextFillPath(ctx);//实心
}

/**
 *  画四边形
 */
void draw4Rect()
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //2、画一个矩形
    CGContextAddRect(ctx, CGRectMake(10, 10, 100, 100));
    
    CGContextStrokePath(ctx);
}

@end

///////////////////////////////////////////////////////////////
画圆形
#import "CircleView.h"

@implementation CircleView

- (void)drawRect:(CGRect)rect
{
    //drawCircle();
    //drawCircle2();
    drawCircle3();
}

/**
 *  综合画:画四分之一
 */
void drawCircle3()
{
    //1、获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //2、画四分之一圆
    CGContextMoveToPoint(ctx, 100, 100);
    CGContextAddLineToPoint(ctx, 100, 150);
    
    CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);
    
    //CGContextAddLineToPoint(ctx, 100, 100);
    CGContextClosePath(ctx);//合并路径
    
    [[UIColor redColor] set];
    
    //3、显示所绘制内容
    //CGContextStrokePath(ctx);
    CGContextFillPath(ctx);
}

/**
 *  画圆
 */
void drawCircle()
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //画圆
    CGContextAddEllipseInRect(ctx, CGRectMake(10, 10, 100, 100));
    //画椭圆
    CGContextAddEllipseInRect(ctx, CGRectMake(10, 10, 200, 100));
    
    CGContextStrokePath(ctx);//空心
    
}

/**
 *  画圆弧
 */
void drawCircle2()
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //画圆
    /**
     x\y    :圆心
     radius :半径
     startAngle:开始角度
     endAngle:结束角度
     clockwise:圆弧的伸展方向(0:顺时针  1:逆时针)
     */
    CGContextAddArc(ctx, 100, 100, 60, 0, M_PI, 0);
    
    CGContextStrokePath(ctx);
   
}

@end

///////////////////////////////////////////////////////////////

摘抄到自己的博客,整个画图的整理(重点)
http://donbe.blog.163.com/blog/static/138048021201052093633776/

///////////////////////////////////////////////////////////////
画文字和图片


#import "TextImageView.h"

@implementation TextImageView

- (void)drawRect:(CGRect)rect
{
    //drawText();
    drawImg();
}

/**
 *  画图片
 */
void drawImg()
{
    //1、取得图片
    UIImage *image = [UIImage imageNamed:@"me"];
    
    //2、画
    //[image drawAtPoint:CGPointMake(50, 50)];//图片原始画到某个点位置
    //[image drawInRect:CGRectMake(0, 0, 150, 150)];//图片拉伸画到某个位置
    [image drawAsPatternInRect:CGRectMake(0, 0, 200, 200)];//重复,平铺,就是以前网页背景
}

/**
 *  画文字
 */
void drawText()
{
    //1、获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //2、画文字
    NSString *str = @"哈哈Hello Moring";
    
    //在某个点画文字
    [str drawAtPoint:CGPointZero withAttributes:nil];
    //在某个区域内画
    CGRect cubeRect = CGRectMake(50, 50, 100, 100);
    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
    //NSForegroundColorAttributeName 文字yanse
    attrs[NSForegroundColorAttributeName] = [UIColor redColor];
    //NSFontAttributeName 字体大小
    attrs[NSFontAttributeName] = [UIFont systemFontOfSize:20];
    [str drawInRect:cubeRect withAttributes:attrs];
    
    //3、显示
    CGContextStrokePath(ctx);
}

@end

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值