当我们想要重绘某个视图的时候,我们不能直接调用drawRect:的方法,因为该方法为系统自动调用,我们手动调用无效,系统提供了两个方法让我们进行间接调用drawRect:来达到重绘视图的目的
方法一:重新绘制这个view
[self setNeedsDisplay];
方法二:重新绘制view的某个区域
[self setNeedsDisplayInRect:rect];
// 绘制一条贝赛尔曲线
- (void)p_drawCurve {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 100, 100);
// 绘制贝赛尔曲线
// 参数一:关联的绘制目标
// 参数二:控制点1的x坐标
// 参数三:控制点1的y坐标
// 参数四:控制点2的x坐标
// 参数五:控制点2的y坐标
// 参数六:终点的x坐标
// 参数七:终点的y坐标
CGContextAddCurveToPoint(context, 150, 50, 50, 200, 200, 100);
CGContextStrokePath(context);
}
// 画一个矩形
- (void)p_drawOneRect {
CGContextRef context = UIGraphicsGetCurrentContext();
// 绘制矩形
// 参数一:关联的绘制目标
// 参数二:绘制位置及大小
CGContextAddRect(context, CGRectMake(100, 100, 100, 100));
CGContextStrokePath(context);
}
// 绘制椭圆
- (void)p_drawEllipse {
CGContextRef context = UIGraphicsGetCurrentContext();
// 绘制椭圆
// 参数一:关联的绘制目标
// 参数二:绘制的位置及大小
CGContextAddEllipseInRect(context, CGRectMake(100, 100, 100, 100));
CGContextStrokePath(context);
}
// 绘制一条多端点的线
- (void)p_drawLines {
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint pointArray[] = {CGPointMake(100, 100), CGPointMake(200, 100), CGPointMake(200, 200), CGPointMake(100, 200)};
// 通过数组绘制一条多端点的线
// 参数一:关联的绘制目标
// 参数二:数组
// 参数三:数组元素个数
CGContextAddLines(context, pointArray, sizeof(pointArray) / sizeof(CGPoint));
// 设置填充的颜色
// 方法一:
CGContextSetRGBFillColor(context, 211.f / 255.f, 106.f / 255.f, 119.f / 255.f, 1.0);
// 方法二:
[[UIColor redColor] setFill];
// 闭合绘制路径,会从当前点绘制至起点
CGContextClosePath(context);
// CGContextStrokePath(context);
// // 填充闭合路径
// CGContextFillPath(context);
// 绘制路径
CGContextDrawPath(context, kCGPathFillStroke);
}
// 绘制一条弧
- (void)p_drawArc {
CGContextRef context = UIGraphicsGetCurrentContext();
// 绘制一条弧
// 参数一:关联的绘制目标
// 参数二:原点的坐标x
// 参数三:原点的坐标y
// 参数四:半径
// 参数五:起始弧度
// 参数六:结束弧度
// 参数七:绘制方向(0为顺时针,1为逆时针)
CGContextAddArc(context, 100, 100, 50, 0, 135 * (M_PI / 180), 1);
CGContextStrokePath(context);
}
// 绘制一条线段
- (void)p_drawLine {
// 获取绘制目标,当绘制引擎调用drawRect方法进行视图渲染的时候,会自动为我们创建一个绘制目标,这个目标相当于一块画布,关联着我们需要绘制的内容
CGContextRef context = UIGraphicsGetCurrentContext();
// 设置一个起点的坐标,绘制系统会追踪至该点进行绘制
// 参数一:关联的绘制目标
// 参数二:起点的x坐标
// 参数三:起点的y坐标
CGContextMoveToPoint(context, 100, 100);
// 设置一条线上的端点
// 参数一:关联的绘制目标
// 参数二:该端点的x坐标
// 参数三:该端点的y坐标
CGContextAddLineToPoint(context, 200, 100);
// 设置描边的颜色
// 方法一:
CGContextSetRGBStrokeColor(context, 211.f / 255.f, 106.f / 255.f, 119.f / 255.f, 1.0);
// 方法二:
[[UIColor redColor] setStroke];
// 设置描边的宽度
CGContextSetLineWidth(context, 20);
// 描边
CGContextStrokePath(context);
}
网友评论