Quartz2D IOS绘图 线 椭圆 矩形 贝塞尔曲线 弧
2015-12-07 00:00
591 查看
//
// ViewController.m
// Quartz2D
//
// Created by dc008 on 15/12/7.
// Copyright © 2015年 CXY. All rights reserved.
//
#import "ViewController.h"
#import "CuiXiaoYu.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CuiXiaoYu *cxy = [[CuiXiaoYu alloc]initWithFrame:CGRectMake(0, 0, 375, 667)];
// cxy.backgroundColor =[UIColor redColor];
[self.view addSubview:cxy];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
//
// CuiXiaoYu.m
// Quartz2D
//
// Created by dc008 on 15/12/7.
// Copyright © 2015年 CXY. All rights reserved.
//
#import "CuiXiaoYu.h"
@implementation CuiXiaoYu
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
- (void)drawRect:(CGRect)rect{
NSLog(@"drawRect被调用了");
// [self drawLine];
CGContextRef ctx = UIGraphicsGetCurrentContext();
// [self drawRectWithContext:ctx];
// [self drawEllipse:ctx];
// [self drawArc:ctx];
// [self drawCurve:ctx];
[self drawOneCurve:ctx];
}
#pragma mark 绘制线
- (void)drawLine{
//1.获得图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextRef context = UIGraphicsGetCurrentContext();
//2.拼接图形(路径)
//画一条直线
//设置起始位置
CGContextMoveToPoint(ctx, 0, 0);
CGContextMoveToPoint(context, 10, 10);
//添加一条线段到点(100,100)
CGContextAddLineToPoint(ctx, 375/2.0, 667/2.0);
CGContextAddLineToPoint(ctx, 375, 0);
CGContextAddLineToPoint(context, 375, 667);
//设置直线的颜色(黄色)
// CGContextSetRGBStrokeColor (ctx, 0, 0 , 1 , 1 );
//set : 同时设置为空心和实心颜色
//stroke :设置空心颜色
//fill : 设置实心颜色
[[UIColor redColor]set];
//设置填充颜色
CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);
CGContextSetRGBFillColor(context, 0, 0, 2, 2);
// [[UIColor yellowColor] set];
//渲染颜色到view
// CGContextFillPath(ctx);// 实心渲染
// CGContextStrokePath(ctx);// 空心渲染
//闭合路径 自动添加线来闭合图形
CGContextClosePath(ctx);
//设置直线的宽度
CGContextSetLineWidth(ctx, 10);
CGContextSetLineWidth(context, 10);
//设置直线开头的样式(圆)
CGContextSetLineCap(ctx, kCGLineCapRound);
//设置直线转折点的样式(圆)
CGContextSetLineJoin(ctx, kCGLineJoinRound);
//3.渲染显示到View上面
// CGContextFillPath(ctx); 实心渲染
// CGContextStrokePath(ctx);
CGContextDrawPath(ctx, kCGPathFillStroke);
CGContextDrawPath(context, kCGPathEOFillStroke);
}
#pragma mark 绘制矩形
- (void) drawRectWithContext : (CGContextRef)context{
//确定矩形图像的大小位置
CGRect rect = CGRectMake(20, 20, 335, 50);
CGContextAddRect(context, rect);
//设置矩形的属性
[[UIColor whiteColor]set];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制椭圆
- (void) drawEllipse : (CGContextRef)context {
CGRect rect = CGRectMake(100, 100, 200, 200);
CGContextAddEllipseInRect(context, rect);
//设置属性
[[UIColor grayColor]set];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制弧
- (void) drawArc : (CGContextRef)context {
/*
x:中心点x坐标
y:中心点y坐标
radius:半径
startAngle:起始弧度
endAngle:结束弧度
clockwise:是否逆时针绘制,0则顺时针绘制
*/
CGContextSetLineWidth(context, 20);
CGContextAddArc(context, 375/2.0, 667/2.0,100 , 0.0, M_PI_2, 1);
//设置属性
[[UIColor orangeColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark 绘制贝塞尔曲线
- (void) drawCurve : (CGContextRef) context {
CGContextMoveToPoint(context, 20, 500);
/*
cp1x:第一个控制点x坐标
cp1y:第一个控制点y坐标
cp2x:第二个控制点x坐标
cp2y:第二个控制点y坐标
x:结束点x坐标
y:结束点y坐标
*/
CGContextAddCurveToPoint(context, 20, 300, 295, 500, 355, 300);
//设置曲线属性
[[UIColor yellowColor]setFill];
[[UIColor redColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
//设置第一条线
CGContextMoveToPoint(context,20 , 500);
CGContextAddLineToPoint(context, 20, 300);
CGContextSetLineWidth(context, 5);
//设置第二条线
CGContextMoveToPoint(context, 355, 300);
CGContextAddLineToPoint(context, 295, 500);
CGContextSetLineWidth(context, 5);//设置边框宽度
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制一个控制点的贝塞尔曲线
-(void) drawOneCurve : (CGContextRef) context {
//移动到曲线起始位置
CGContextMoveToPoint(context, 20, 100);
CGContextAddQuadCurveToPoint(context, 187.5, 0, 355, 100);
[[UIColor redColor]setFill];
[[UIColor whiteColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
@end
// ViewController.m
// Quartz2D
//
// Created by dc008 on 15/12/7.
// Copyright © 2015年 CXY. All rights reserved.
//
#import "ViewController.h"
#import "CuiXiaoYu.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CuiXiaoYu *cxy = [[CuiXiaoYu alloc]initWithFrame:CGRectMake(0, 0, 375, 667)];
// cxy.backgroundColor =[UIColor redColor];
[self.view addSubview:cxy];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
//
// CuiXiaoYu.m
// Quartz2D
//
// Created by dc008 on 15/12/7.
// Copyright © 2015年 CXY. All rights reserved.
//
#import "CuiXiaoYu.h"
@implementation CuiXiaoYu
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
- (void)drawRect:(CGRect)rect{
NSLog(@"drawRect被调用了");
// [self drawLine];
CGContextRef ctx = UIGraphicsGetCurrentContext();
// [self drawRectWithContext:ctx];
// [self drawEllipse:ctx];
// [self drawArc:ctx];
// [self drawCurve:ctx];
[self drawOneCurve:ctx];
}
#pragma mark 绘制线
- (void)drawLine{
//1.获得图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextRef context = UIGraphicsGetCurrentContext();
//2.拼接图形(路径)
//画一条直线
//设置起始位置
CGContextMoveToPoint(ctx, 0, 0);
CGContextMoveToPoint(context, 10, 10);
//添加一条线段到点(100,100)
CGContextAddLineToPoint(ctx, 375/2.0, 667/2.0);
CGContextAddLineToPoint(ctx, 375, 0);
CGContextAddLineToPoint(context, 375, 667);
//设置直线的颜色(黄色)
// CGContextSetRGBStrokeColor (ctx, 0, 0 , 1 , 1 );
//set : 同时设置为空心和实心颜色
//stroke :设置空心颜色
//fill : 设置实心颜色
[[UIColor redColor]set];
//设置填充颜色
CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);
CGContextSetRGBFillColor(context, 0, 0, 2, 2);
// [[UIColor yellowColor] set];
//渲染颜色到view
// CGContextFillPath(ctx);// 实心渲染
// CGContextStrokePath(ctx);// 空心渲染
//闭合路径 自动添加线来闭合图形
CGContextClosePath(ctx);
//设置直线的宽度
CGContextSetLineWidth(ctx, 10);
CGContextSetLineWidth(context, 10);
//设置直线开头的样式(圆)
CGContextSetLineCap(ctx, kCGLineCapRound);
//设置直线转折点的样式(圆)
CGContextSetLineJoin(ctx, kCGLineJoinRound);
//3.渲染显示到View上面
// CGContextFillPath(ctx); 实心渲染
// CGContextStrokePath(ctx);
CGContextDrawPath(ctx, kCGPathFillStroke);
CGContextDrawPath(context, kCGPathEOFillStroke);
}
#pragma mark 绘制矩形
- (void) drawRectWithContext : (CGContextRef)context{
//确定矩形图像的大小位置
CGRect rect = CGRectMake(20, 20, 335, 50);
CGContextAddRect(context, rect);
//设置矩形的属性
[[UIColor whiteColor]set];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制椭圆
- (void) drawEllipse : (CGContextRef)context {
CGRect rect = CGRectMake(100, 100, 200, 200);
CGContextAddEllipseInRect(context, rect);
//设置属性
[[UIColor grayColor]set];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制弧
- (void) drawArc : (CGContextRef)context {
/*
x:中心点x坐标
y:中心点y坐标
radius:半径
startAngle:起始弧度
endAngle:结束弧度
clockwise:是否逆时针绘制,0则顺时针绘制
*/
CGContextSetLineWidth(context, 20);
CGContextAddArc(context, 375/2.0, 667/2.0,100 , 0.0, M_PI_2, 1);
//设置属性
[[UIColor orangeColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark 绘制贝塞尔曲线
- (void) drawCurve : (CGContextRef) context {
CGContextMoveToPoint(context, 20, 500);
/*
cp1x:第一个控制点x坐标
cp1y:第一个控制点y坐标
cp2x:第二个控制点x坐标
cp2y:第二个控制点y坐标
x:结束点x坐标
y:结束点y坐标
*/
CGContextAddCurveToPoint(context, 20, 300, 295, 500, 355, 300);
//设置曲线属性
[[UIColor yellowColor]setFill];
[[UIColor redColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
//设置第一条线
CGContextMoveToPoint(context,20 , 500);
CGContextAddLineToPoint(context, 20, 300);
CGContextSetLineWidth(context, 5);
//设置第二条线
CGContextMoveToPoint(context, 355, 300);
CGContextAddLineToPoint(context, 295, 500);
CGContextSetLineWidth(context, 5);//设置边框宽度
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制一个控制点的贝塞尔曲线
-(void) drawOneCurve : (CGContextRef) context {
//移动到曲线起始位置
CGContextMoveToPoint(context, 20, 100);
CGContextAddQuadCurveToPoint(context, 187.5, 0, 355, 100);
[[UIColor redColor]setFill];
[[UIColor whiteColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
@end
相关文章推荐
- iOS之[StatusBar详解]
- iOS开发技巧 autolayout自动布局
- iOS进程、线程相关总结
- iOS开发 - 22.实用技术之地图的基本使用
- iOS-Block总结 && 全面解析逆向传值
- 蓝懿iOS 技术内容和心得 12.6
- iOS-性能优化
- 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题
- IOS开发记录(二)
- IOS--文件存储
- iOS调试常见错误 如:symbol(s) not found for architecture x86_64
- IOS之nil,Nil,null,Null,NULL,NSNull
- iOS 观察者+通知
- iOS动画和特效(四)controller间的自定义过渡效果
- 框架汇总
- iOS:友盟SDK分享
- OC-框架
- ios 画图
- iOS 轮播图 KDCycleBannerView
- iOS:GitHub上值得关注的iOS开源项目