Quartz 2D 绘图(线条、矩形、圆弧、贝塞尔曲线、图片、文字)

#import <UIKit/UIKit.h>

@interface Myview : UIView

@end
#import "Myview.h"

@implementation Myview


- (void)drawRect:(CGRect)rect {

    //绘制步骤
    /*
     1.获取绘制的对象(上下文)(画布、纸)
     2.创建绘图的路径
     3.将路径添加到绘制对象(上下文)上
     4.设置绘制的属性:线条的颜色、线条的宽度、线条锯尺,裁剪区域、、、
     5.绘制
     (6.释放路径)
     */
    
    //绘制线条
    // 1.获取绘制的对象(上下文)(画布、纸)
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    //绘制线条1
//    [self drawLine1:context];
    
//    绘制线条2
//    [self drawLine2:context];
    
//    绘制矩形
//    [self drawRt:context];
    
//    绘制圆弧
    [self drawArc:context];
    
//    绘制贝塞尔曲线
//    [self drawCure:context];
    
    //绘制文字
//    [self drawWord:context];
    
//    绘制图片
//    [self drawImgView:context];
    
}

#pragma mark - 绘制图片
- (void)drawImgView:(CGContextRef)context {

    UIImage *img = [UIImage imageNamed:@"1.jpg"];
    
    //UIKit中提供了三种绘图方法
    //方式一:指定绘图的位置,大小有图片决定
//    [img drawAtPoint:CGPointMake(90, 90)];
   //方式二:指定图片的大小和位置,这种方式图片会被拉伸
//    [img drawInRect:CGRectMake(50, 50, 290, 290)];
    //方式三:这种方式图片会被平铺
//    [img drawAsPatternInRect:CGRectMake(50, 50, 290, 290)];
    
    //在绘图之前应该转换坐标体系
    
    //保存原有的坐标体系
    CGContextSaveGState(context);
    
    /*
    //(1)顺时针旋转180度
    CGContextRotateCTM(context, M_PI);
    //(2)缩放x和Y轴
    CGContextScaleCTM(context, -1, 1);
    //(3)平移图片
    CGContextTranslateCTM(context, 0, -200);
    */
    
    CGContextScaleCTM(context, 1, -1);
    CGContextTranslateCTM(context, 0, -200);
    
    //使用Core Graphic绘制图像
    CGContextDrawImage(context, CGRectMake(0, 0, 200, 200), img.CGImage);
    
    //还原坐标体系
    CGContextRestoreGState(context);
    
}

#pragma mark - 绘制文字
- (void)drawWord:(CGContextRef)context {

    //设置绘制的内容
    NSString *text = @"今天中午吃什么呢";
  
//    设置绘制区域
    CGRect rect = CGRectMake(50, 50, 200, 50);
    //绘制矩形
    UIRectFrame(rect);
    
    /*
    //设置字体的属性
    NSDictionary *dic = @{
                          NSFontAttributeName:[UIFont systemFontOfSize:18]
                          };
    [text drawWithRect:rect options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
    */
    [[UIColor redColor] set];
    [text drawInRect:rect withFont:[UIFont systemFontOfSize:20] lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
    
}

#pragma mark - 绘制贝塞尔曲线
- (void)drawCure:(CGContextRef)context {

    //设置起点
    CGContextMoveToPoint(context, 20, 200);
    
    //添加曲线
//    CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);
    
    CGContextAddQuadCurveToPoint(context, 10, 20, 300, 20);
    
    //绘制
    CGContextDrawPath(context, kCGPathStroke);
    
}

#pragma mark - 绘制圆弧
- (void)drawArc:(CGContextRef)context {
 
    /*
     context:上下文
     x,y :圆心
     radius:半径
     startAngle:其实角度
     endAngle:结束角度
     clockwise:角度旋转方向 0:顺时针   1:逆时针
     */
    /*
    CGContextAddArc(context, 150, 150, 90, 0, M_PI*2, 1);
    
    //设置线条的颜色
    [[UIColor redColor] setStroke];
    //设置填充色
    [[UIColor greenColor] setFill];
    
    //绘制
    CGContextDrawPath(context, kCGPathFillStroke);
    */
    
    //绘制椭圆
    CGRect rect = CGRectMake(90, 90, 200, 100);
    
    UIRectFrame(rect);
    
    //设置线条的颜色
    [[UIColor cyanColor] setStroke];
    
    //利用矩形绘制内切圆
    CGContextAddEllipseInRect(context, rect);
    
    //绘制
    CGContextDrawPath(context, kCGPathStroke);
    
    
    
    
}

#pragma mark - 绘制矩形
- (void)drawRt:(CGContextRef)context {

    /*
    //1.context 上下文
    
    //2.设置矩形的大小和位置
    CGRect rect = CGRectMake(50, 50, 100, 100);
    
    //3.在context上添加矩形
    CGContextAddRect(context, rect);
    
    //4.设置绘制的属性
    //设置线条的颜色
    [[UIColor redColor] setStroke];
    [[UIColor  cyanColor] setFill];
    
    //设置线条的宽度
    CGContextSetLineWidth(context, 2);
    
    //设置线条连接点的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);
    
    //5.绘制
    CGContextDrawPath(context, kCGPathFillStroke);
    */
    
    //使用UIKit中绘制矩形的方法
    
    CGRect rect = CGRectMake(50, 50, 100, 100);
    
    [[UIColor greenColor] setFill];
    [[UIColor redColor] setStroke];
    
    //绘制矩形的线条
    UIRectFrame(rect);
    //绘制矩形区域
//    UIRectFill(rect);
}

#pragma mark - 绘制线条2
- (void)drawLine2:(CGContextRef)context {

    //1.获取上下文
//    context
    
    //2.设置绘图的路径
    
    CGPoint p1 = CGPointMake(20, 20);
    CGPoint p2 = CGPointMake(120, 20);
    CGPoint p3 = CGPointMake(120, 100);
    CGPoint p4 = CGPointMake(20, 100);
    CGPoint p5 = CGPointMake(20, 20);
    
    CGPoint points[] = {p1,p2,p3,p4,p5};
    
    CGContextAddLines(context, points, 5);
    //4.设置绘制属性
    //设置线条的颜色和填充色
//    CGContextSetRGBFillColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>)
//    CGContextSetRGBStrokeColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>)
    
    //使用UIKit中的方法设置颜色
//    [[UIColor redColor] setStroke];
//    [[UIColor greenColor] setFill];
    //同时设置线条的颜色和填充色,默认是黑色
//    [[UIColor redColor] set];
    
    //5.绘制路径
    CGContextDrawPath(context, kCGPathFill);
    
}

#pragma mark - 绘制线条1
- (void)drawLine1:(CGContextRef)context {

    //2.创建绘图的路径
    CGMutablePathRef path = CGPathCreateMutable();
    //画线:设置起点
    CGPathMoveToPoint(path, NULL, 50, 50);
    //设置目标点
    CGPathAddLineToPoint(path, NULL, 200, 200);
    //设置目标点
    CGPathAddLineToPoint(path, NULL, 50, 200);
    //设置目标点
    //    CGPathAddLineToPoint(path, NULL, 50, 50);
    
    //设置关闭路径
    CGPathCloseSubpath(path);
    
    
    //3.将路径添加到绘制对象(上下文)上
    CGContextAddPath(context, path);
    
    //4.设置绘制的属性
    //设置线条的颜色
    CGContextSetRGBStrokeColor(context, 23/255.0, 183/255.0, 248/255.0, 1);
    //设置线条的填充色
    CGContextSetRGBFillColor(context, 29/255.0, 29/255.0, 29/255.0, 1);
    
    //设置线条的宽度
    CGContextSetLineWidth(context, 2);
    
    //5.绘制
    /*
     kCGPathStroke:只显示线条的颜色
     kCGPathFill:只显示填充色
     kCGPathFillStroke:线条的颜色和填充色都显示
     */
    CGContextDrawPath(context, kCGPathFillStroke);
    
    //(6.释放路径)
    CGPathRelease(path);
    
}


@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值