博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz 2D中的基本图形绘制
阅读量:5335 次
发布时间:2019-06-15

本文共 4691 字,大约阅读时间需要 15 分钟。

在iOS中绘图一般分为以下几个步骤:

1.获取绘图上下文

2.创建并设置路径

3.将路径添加到上下文

4.设置上下文状态

5.绘制路径

6.释放路径

在UIKit中默认已经为我们准备好了一个图形上下文对象,在UI控件的drawRect:方法(这个方法在 loadView、viewDidLoad方法后执行)中我们可以通过UIKit封装函数UIGraphicsGetCurrentContext()方 法获得这个图形上下文(注意在其他UI控件方法中无法取得这个对象),然后我们只要按照绘图步骤一步步执行即可。下面自定义一个KCView继承自 UIView,重写drawRect:方法绘制两条直线说明上面绘图的步骤:

////  DLView.m//  Demo0223////  Created by wiseman on 16/2/23.//  Copyright (c) 2016年 wiseman. All rights reserved.//#import "DLView.h"@implementation DLView/*// 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{    //1.取得图形的上下文对象    CGContextRef context = UIGraphicsGetCurrentContext();    /*    //2.绘制路径    CGContextMoveToPoint(context, 20, 50);    CGContextAddLineToPoint(context, 20, 100);    CGContextAddLineToPoint(context, 300, 100);    //封闭路径    CGContextClosePath(context);        //3.设置图形上下文属性    [[UIColor redColor] setStroke];//设置红色边框    [[UIColor blueColor] setFill];//设置蓝色填充    //[[UIColor blueColor]set];//同时设置填充和边框色        //4.绘制路径    CGContextDrawPath(context, kCGPathFillStroke);     */        /*        绘制矩形     *///    [self drawRectWithContext:context];        /*        绘制椭圆     *///    [self drawEllipseWithContext:context];        /*        绘制弧形     *///    [self drawArc:context];        /*        绘制贝塞尔曲线     *///    [self drawCurve:context];        /*        文字绘制     */    [self drawText:context];    }#pragma mark - 绘制文字-(void)drawText:(CGContextRef)context{    //绘制到指定的区域内容    NSString *str=@"Star Walk is the most beautiful stargazing app you’ve ever seen on a mobile device. It will become your go-to interactive astro guide to the night sky, following your every movement in real-time and allowing you to explore over 200, 000 celestial bodies with extensive information about stars and constellations that you find.";    CGRect rect= CGRectMake(20, 50, 280, 100);    UIFont *font=[UIFont systemFontOfSize:18];//设置字体    UIColor *color=[UIColor redColor];//字体颜色    NSMutableParagraphStyle *style=[[NSMutableParagraphStyle alloc]init];//段落样式    NSTextAlignment align=NSTextAlignmentLeft;//对齐方式    style.alignment=align;    [str drawInRect:rect withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:color,NSParagraphStyleAttributeName:style}];}#pragma mark - 绘制贝塞尔曲线-(void)drawCurve:(CGContextRef)context{    //绘制曲线    CGContextMoveToPoint(context, 20, 100);//移动到起始位置    /*绘制二次贝塞尔曲线     c:图形上下文     cpx:控制点x坐标     cpy:控制点y坐标     x:结束点x坐标     y:结束点y坐标          CGContextAddQuadCurveToPoint(CGContextRef c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y)     */    CGContextAddQuadCurveToPoint(context, 160, 0, 300, 100);        [[UIColor clearColor] setFill];    [[UIColor blackColor] setStroke];            /*绘制三次贝塞尔曲线     c:图形上下文     cp1x:第一个控制点x坐标     cp1y:第一个控制点y坐标     cp2x:第二个控制点x坐标     cp2y:第二个控制点y坐标     x:结束点x坐标     y:结束点y坐标     */    CGContextMoveToPoint(context, 20, 500);    CGContextAddCurveToPoint(context, 80, 300, 240, 500, 300, 300);        [[UIColor redColor] setStroke];    [[UIColor clearColor] setFill];        CGContextDrawPath(context, kCGPathFillStroke);}#pragma mark - 绘制弧形-(void)drawArc:(CGContextRef)context{    //添加弧形对象    /*     x:中心点x坐标     y:中心点y坐标     radius:半径     startAngle:起始弧度     endAngle:终止弧度     closewise:是否逆时针绘制,0则顺时针绘制         CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)     */    CGContextAddArc(context, 160, 160, 100, 0, M_PI_2, 1);    [[UIColor blueColor]setStroke];    [[UIColor clearColor]setFill];    CGContextDrawPath(context, kCGPathFillStroke);    }#pragma mark - 绘制椭圆-(void)drawEllipseWithContext:(CGContextRef)context{    //添加对象,绘制椭圆(圆形)的过程首先也是创建一个矩形    CGRect rect = CGRectMake(50, 50, 220, 200);    CGContextAddEllipseInRect(context, rect);    //设置属性    [[UIColor redColor] set];    CGContextDrawPath(context, kCGPathFillStroke);}#pragma mark 绘制矩形-(void)drawRectWithContext:(CGContextRef)context{    //添加矩形对象    CGRect rect=CGRectMake(20, 50, 280.0, 50.0);    CGContextAddRect(context,rect);    //设置属性    [[UIColor blueColor]set];    //绘制    CGContextDrawPath(context, kCGPathFillStroke);}#pragma mark 绘制矩形(利用UIKit的封装方法)-(void)drawRectByUIKitWithContext:(CGContextRef)context{    CGRect rect= CGRectMake(20, 150, 280.0, 50.0);    CGRect rect2=CGRectMake(20, 250, 280.0, 50.0);    //设置属性    [[UIColor yellowColor]set];    //绘制矩形,相当于创建对象、添加对象到上下文、绘制三个步骤    UIRectFill(rect);//绘制矩形(只有填充)        [[UIColor redColor]setStroke];    UIRectFrame(rect2);//绘制矩形(只有边框)}@end

 

转载于:https://www.cnblogs.com/iOSDeng/p/5209806.html

你可能感兴趣的文章
learning awk
查看>>
LeetCode-Strobogrammatic Number
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
关于System.__ComObject一些问题
查看>>
java stringbuffer二
查看>>
[hihoCoder] 拓扑排序·一
查看>>
(转)接口测试用例设计(详细干货)
查看>>
js Math对象方法 (个人学习笔记)
查看>>
helm-chart-2-chart结构和简单模板
查看>>
转载Repository 和Unit of work的使用说明
查看>>
【译】SSH隧道:本地和远程端口转发
查看>>
win8.1安装Python提示缺失api-ms-win-crt-runtime-l1-1-0.dll问题
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
判断两个字符串是否相等【JAVA】
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
协议和代理
查看>>