ViewController.m
#import "ViewController.h"
#import "DrawerView.h"
#define KScreenWidth [UIScreen mainScreen].bounds.size.width
#define KScreenHeight [UIScreen mainScreen].bounds.size.height
@interface ViewController ()
{
DrawerView *drawer;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
drawer = [[DrawerView alloc]initWithFrame:CGRectMake(0, 20, KScreenWidth, 400)];
drawer.backgroundColor = [UIColor whiteColor];
[self.view addSubview:drawer];
}
- (IBAction)buttonClick:(UIButton *)sender {
//1.获取title
NSString *title = [sender titleForState:UIControlStateNormal];
//2.通过title 构建SEL
SEL selector = NSSelectorFromString(title);
//3.将方法名传入UIView中
[drawer setASelector:selector];
//4.drawerView 重绘 setNeedsDisplay间接调用drawRect:方法
[drawer setNeedsDisplay];
}
@end
DrawView.m
#import "DrawerView.h"
@implementation DrawerView
/**
* quartz2d绘图的步骤:(不用背)
1.获取与当前视图关联的[上下文]对象
2.✅创建路径 path
2.1创建路径
2.2设置路径的起点
2.3增加路径
3.✅设置[上下文]属性
3.1边线颜色
3.2填充颜色
3.3线条宽度
3.4线条样式
3.5线条连接方式
3.6线条首尾样式
4.讲路径添加到[上下文]对象
5.绘制路径
6.释放路径
*/
- (void)drawRect:(CGRect)rect{
NSLog(@"drawRect");
//判断本类对象是否响应SEL方法
if ([self respondsToSelector:_aSelector]) {
//如果响应则调用(安全判断)
[self performSelector:_aSelector];
}
}
#pragma mark --绘制图片
- (void)drawImage{
UIImage *image = [UIImage imageNamed:@"girl.png"];
//指定矩形区域绘制图片 如果图片不够大,则平铺
// [image drawAsPatternInRect:self.bounds];
//制定矩形区域绘制图片 如果图片不够大,则拉伸
// [image drawInRect:self.bounds];
//制定一个点绘制一张图
[image drawAtPoint:CGPointMake(50, 50)];
}
#pragma mark --绘制文字
- (void)drawString{
NSString *text = @"Quartz 2D 绘图";
//以某点为起点绘制文字
[text drawAtPoint:CGPointMake(100, 100) withAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:20]}];
//在矩形区域内绘制文字
[text drawInRect:CGRectMake(100, 200, 200, 50) withAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:20]}];
}
#pragma mark --绘制多边形或多角星
- (void)drawStar{
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint p0 = [self getPointFromCornerCount:5 radius:100 index:0 center:CGPointMake(200, 200)];
CGPoint p1 = [self getPointFromCornerCount:5 radius:100 index:1 center:CGPointMake(200, 200)];
CGPoint p2 = [self getPointFromCornerCount:5 radius:100 index:2 center:CGPointMake(200, 200)];
CGPoint p3 = [self getPointFromCornerCount:5 radius:100 index:3 center:CGPointMake(200, 200)];
CGPoint p4 = [self getPointFromCornerCount:5 radius:100 index:4 center:CGPointMake(200, 200)];
//依次相连 --> 多边形
// CGPoint points[] = {p0,p1,p2,p3,p4};
//间隔相连 --> 多角星
CGPoint points[] = {p0,p2,p4,p1,p3};
CGContextAddLines(context, points, 5);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathStroke);
}
/**
* 计算多边形各个定点坐标的方法
*
* @param cornerCount 角个数
* @param radius 半径
* @param index 顶点下标
* @param center 圆心坐标点
*
* @return 顶点的坐标
*/
- (CGPoint )getPointFromCornerCount:(NSInteger )cornerCount radius:(float )radius index:(NSInteger )index center: (CGPoint )center{
float corner = 2* M_PI/cornerCount;
CGFloat x = radius *cosf(corner *index);
CGFloat y = radius *sinf(corner *index);
return CGPointMake(center.x +x, center.y +y);
}
#pragma mark --绘制曲线
- (void)drawCurve{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 20, 200);
/**
* 贝塞尔曲线:
三点:起点 辅助点 终点
线:连接起点和终点,并穿过辅助点
四点:起点 辅助点1 辅助点2 终点
线:连接起点和终点,并以[起点--->辅助点1]和[终点--->辅助点2]两条线作为基准线,来决定弧度
*/
CGContextAddQuadCurveToPoint(context, 50, 140, 220, 200);
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark --绘制椭圆
- (void)drawEllipse{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(context, CGRectMake(50, 50, 300, 150));
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark --绘制矩形
- (void)drawShape{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddRect(context, CGRectMake(50, 50, 200, 200));
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark --绘制圆弧
- (void)drawCircle{
//1.获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2.绘制路径
/**
* 绘制圆弧的方法
*
* @param c#> 上下文
* @param x#> 圆心x
* @param y#> 圆心y
* @param radius#> 半径
* @param startAngle#> 开始的弧度
* @param endAngle#> 结束的弧度
* @param clockwise#> 时针方向 0顺时针 1是逆时针
*
*/
//.1.起始点
// CGContextMoveToPoint(context, 414/2, 200);
//.2.绘制图形路径
CGContextAddArc(context, 414/2, 200, 100, 0, M_PI, 1);
//3.设置上下文属性
[[UIColor blueColor]setStroke];
[[UIColor orangeColor]setFill];
//4.绘制
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark --绘制线条
- (void)drawLine{
//1.获取当前视图相关的上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2.路径
//创建路径对象
CGMutablePathRef path = CGPathCreateMutable();
//起点
CGPathMoveToPoint(path, NULL, 0, 5);
//添加路径点
CGPathAddLineToPoint(path, NULL, 300, 5);
CGPathAddLineToPoint(path, NULL, 300, 200);
// CGPathAddLineToPoint(path, NULL, 100, 100);
//设置路径闭环
// CGPathCloseSubpath(path);
//3.上下文属性
//填充颜色 (默认黑)
CGContextSetRGBFillColor(context, 212/255.0, 24/255.0, 148/255.0, 1);
//线条宽度
//‼️如果是OC->[context setLineWidth:5];
CGContextSetLineWidth(context, 10);
//线条颜色 (默认黑) (0,0,0)是黑色 (1,1,1)是白色
CGContextSetRGBStrokeColor(context, 68/255.0, 178/255.0, 249/255.0, 1);
//线条首尾样式
/**
* kCGLineCapButt,
kCGLineCapRound, 圆弧
kCGLineCapSquare 方形
*/
CGContextSetLineCap(context, kCGLineCapButt);
//线条连接样式
/**
* kCGLineJoinMiter, 默认
kCGLineJoinRound, 圆弧
kCGLineJoinBevel 斜线
*/
CGContextSetLineJoin(context, kCGLineJoinBevel);
//虚线定制
/**
* context : 上下文对象
phase : 虚线起点与路径起点的距离
lengths : C数组 从数组中循环获取虚线长度和间隔
count : 数组长度
*
*/
CGFloat lengths[] = {15,10,5};
CGContextSetLineDash(context, 0, lengths, 3);
//4.路径结合上下文
CGContextAddPath(context, path);
//5.绘制路径
/**
* kCGPathFill, 填充
kCGPathEOFill,
kCGPathStroke, 画线
kCGPathFillStroke, 画线+填充
kCGPathEOFillStroke
*/
CGContextDrawPath(context, kCGPathStroke);
//6.释放路径
CGPathRelease(path);
}
@end
![](https://img.haomeiwen.com/i1395501/0cb31d66b4e81956.png)
![](https://img.haomeiwen.com/i1395501/7cd32d915e6ad440.png)
![](https://img.haomeiwen.com/i1395501/2a1620c52b4db6c9.png)
![](https://img.haomeiwen.com/i1395501/65f97d63afc97909.png)
屏幕快照 2016-03-14 下午7.56.03.png](https://img.haomeiwen.com/i1395501/d91e9ed755f08056.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://img.haomeiwen.com/i1395501/aedf79019a298e12.png)
![](https://img.haomeiwen.com/i1395501/125a5dd39d2d9792.png)
![](https://img.haomeiwen.com/i1395501/bbdad6a327814ffc.png)
网友评论