IOS绘图

#import "MyView.h"

@implementation MyView

- (void)drawRect:(CGRect)rect {
    //获取图形上下文(drawrect方法中已经创建好图形上下文)
    CGContextRef context = UIGraphicsGetCurrentContext();

//    [self drawLineWithContext:context];
//    [self drawShapeCircleWithContext:context];
//    [self drawCircleWithContext:context];
//    [self drawTextWithContext:context];
//    [self drawImageWithContext:context];
    [self drawGradientWithContext:context];
    CGContextRelease(context);
}

//绘制渐变
- (void)drawGradientWithContext:(CGContextRef)context
{
    /*
     space 颜色空间
     components 颜色数组
     locations 渐变范围
     count locations个数
     */
    //创建颜色空间
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    //颜色数组
    CGFloat components[12] = {
        1.f,0.f,0.f,1.f,
        0.f,0.f,1.f,1.f,
//        0.f,1.f,0.f,1.f
    };
    CGFloat locations[2] = {0.f,1.f};
    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 2);

    //绘制线性渐变
//    CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(self.bounds.size.width, self.bounds.size.height), kCGGradientDrawsAfterEndLocation);

    //绘制径向渐变
    /*
     startPoint:起始圆心位置
     endPoint:结束圆心位置
     startRadius:起始圆的半径
     endRadius:结束圆的半径
     */
    CGPoint startPoint = CGPointMake(100, 200);
    CGPoint endPoint = CGPointMake(150, 150);
    CGContextDrawRadialGradient(context, gradient, startPoint, 0, endPoint, 200, kCGGradientDrawsAfterEndLocation);

    //释放内存
    CGColorSpaceRelease(colorSpace);
    //释放内存
    CGGradientRelease(gradient);
}

//绘制图片
- (void)drawImageWithContext:(CGContextRef)context
{
    UIImage *image = [UIImage imageNamed:@"1.png"];
    //以平铺的形式绘制图片
//    [image drawAsPatternInRect:self.bounds];
    //在某个点绘制图片,图片大小为图片实际大小
//    [image drawAtPoint:CGPointMake(100, 100)];
    //在某个区域绘制图片
    [image drawInRect:CGRectMake(100, 100, 200, 200)];
}

//绘制文字
- (void)drawTextWithContext:(CGContextRef)context
{
    NSString *str = @"宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山宝山";
    //在某个点绘制文字,不会自动换行
//    [str drawAtPoint:CGPointMake(50, 50) withAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:18],NSForegroundColorAttributeName:[UIColor redColor]}];
    //在一个区域内绘制文字,会自动换行
    [str drawInRect:CGRectMake(50, 50, 200, 300) withAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:18],NSForegroundColorAttributeName:[UIColor redColor]}];
}

//绘制圆
- (void)drawCircleWithContext:(CGContextRef)context
{
    CGContextMoveToPoint(context, 200, 200);
    //(x,y) 圆心
    //radius:半径
    //startAngle:起始角度
    //endAngle:结束角度
    //clockwise 1代表逆时针 0顺时针
    CGContextAddArc(context, 200, 200, 120, 0, M_PI, 1);
    CGContextDrawPath(context, kCGPathFill);

    CGContextMoveToPoint(context, 200, 200);
    [[UIColor greenColor]setFill];
    CGContextAddArc(context, 200, 200, 120, M_PI, M_PI_2, 1);
    CGContextDrawPath(context, kCGPathFill);

    CGContextMoveToPoint(context, 200, 200);
    [[UIColor redColor]setFill];
    CGContextAddArc(context, 200, 200, 120, M_PI_2, 0, 1);
    CGContextDrawPath(context, kCGPathFill);
}

//绘制矩形
- (void)drawShapeCircleWithContext:(CGContextRef)context
{
    //添加矩形
    CGRect rect = CGRectMake(100, 100, 200, 150);
    CGContextAddRect(context, rect);
    //设置填充颜色
//    CGContextSetRGBFillColor(context, 1.f, 0.f, 0.f, 1.f);等效于
    [[UIColor redColor]setFill];

    //设置线条颜色
//    CGContextSetRGBStrokeColor(context, 0.f, 1.f, 0.f, 1.f);
    [[UIColor greenColor]setStroke];

    //设置线条宽度
    CGContextSetLineWidth(context, 10.f);
    CGContextDrawPath(context, kCGPathFillStroke);

    //添加一组矩形
    CGRect rects[2] = {CGRectMake(0, 0, 50, 50),CGRectMake(50, 50, 50, 50)};
    CGContextAddRects(context, rects, 2);
    //绘制矩形
    CGContextDrawPath(context, kCGPathStroke);

    //填充一个矩形
//    CGContextFillRect(context, CGRectMake(100, 400, 100, 100));

    //绘制椭圆
    CGContextAddRect(context, CGRectMake(100, 30, 200, 150));
    CGContextAddEllipseInRect(context, CGRectMake(100, 300, 200, 150));
    CGContextDrawPath(context, kCGPathStroke);
}

//绘制线
- (void)drawLineWithContext:(CGContextRef)context
{
    //移动到点
    CGContextMoveToPoint(context, 50, 50);
    //添加到指定点的线
    CGContextAddLineToPoint(context, 200, 200);
    CGContextAddLineToPoint(context, 200, 50);

//    CGPoint points[2] = {CGPointMake(0, 0),CGPointMake(0, 100)};
//    CGContextAddLines(context, points, 2);

    //设置绘制属性
    //设置线条颜色(设置透明度会影响绘制性能)
    CGContextSetRGBStrokeColor(context, 1.f, 0.f, 0.f, 1.0);
//    等效CGContextSetStrokeColorWithColor(context, [[UIColor redColor]CGColor]);

    //设置填充颜色
    CGContextSetRGBFillColor(context, 0.f, 1.f, 0.f, 1.0);

    //设置线条宽度
    CGContextSetLineWidth(context, 1);
    //设置端点样式 kCGLineCapRound:圆角 kCGLineCapSquare:平角
    CGContextSetLineCap(context, kCGLineCapRound);
    //设置线条连接点样式 kCGLineJoinRound:圆角,kCGLineJoinBevel:平角 kCGLineJoinMiter:尖角
    CGContextSetLineJoin(context, kCGLineJoinRound);
    /**
     绘制虚线:
     phase:偏移(相位),一般偏移指定为0
     lengths:数组
     count:数组元素个数
     */
    CGFloat lengths[2] = {20.f,10.f};
    CGContextSetLineDash(context, 0, lengths, 2);

    //关闭路径
    CGContextClosePath(context);

    //绘制路径
    /*
     kCGPathStroke : 只绘制路径
     kCGPathFill : 只填充路径
     kCGPathFillStroke : 绘制路径并填充
     */
    CGContextDrawPath(context, kCGPathFillStroke);
}

@end
时间: 2024-10-15 20:25:02

IOS绘图的相关文章

iOS绘图教程

Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲染,模板.渐变.遮蔽.图像数据管理.图像的创建.遮罩以及PDF文档的创建.显示和分析.为了从感官上对这些概念做一个入门的认识,你可以运行一下官方的example code. iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台的

ios绘图总结

ios绘图总结 分类: IOS_绘图 2012-11-28 11:21 347人阅读 评论(0) 收藏 举报 http://www.cnblogs.com/yuanxiaoping_21cn_com/archive/2012/03/24/2415706.html 0 CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文 1 CGContextMoveToPoint 开始画线 2 CGContextAddLineToPoint 画直

绘制阴影引发的 iOS 绘图性能问题总结

转自:http://blog.devdlh.com/blog/2013/03/18/performance-problerm-caused-by-shadowpath/ 绘制阴影引发的 iOS 绘图性能问题总结 MAR 18TH, 2013 | COMMENTS 在 iOS 开发中,通过设置 layer 的 shadowColor.shadowOpacity.shadowOffset.shadowRadius 几个属性可以很方便的为 UIView 添加阴影效果.但是前段时间碰到一个问题,在添加了

ios绘图教程(转摘)

Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲染,模板.渐变.遮蔽.图像数据管理.图像的创建.遮罩以及PDF文档的创建.显示和分析.为了从感官上对这些概念做一个入门的认识,你可以运行一下官方的example code. iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台的

iOS绘图教程(个人学习总结)

iOS绘图教程:http://www.cocoachina.com/applenews/devnews/2014/0115/7703.html 本篇博文是为了梳理学习过程中得框架,上边链接是cocoachina的教程,更详细一些 iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES 路径用于描述由一序列线和Bézier曲线构成的2D几何形状 Core Graphics中也有一些用于创建简单路径(比如矩形和椭圆形)的便利函数.对于更为复杂的路径,必须用C

iOS绘图详解

Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲染,模板.渐变.遮蔽.图像数据管理.图像的创建.遮罩以及PDF文档的创建.显示和分析.为了从感官上对这些概念做一个入门的认识,你可以运行一下官方的 example code. iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES.OpenGL ES是跨平台

IOS绘图详解(http://blog.163.com/wkyuyang_001/blog/static/10802122820133190545227/)

14.1 Quartz概述 Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics.共有两种部分组成Quartz: Quartz Compositor,合成视窗系统,管理和合成幕后视窗影像来建立Mac OS X使用者接口. Quartz 2D,是iOS和Mac OS X环境下的二维绘图引擎. 涉及内容包括:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理,防锯齿渲染,生成PDF,以及PDF元数据相关处理. 14.2 绘制基本几何图形 视图绘制

蓝懿IOS绘图Quartz2D练习

今天刘国斌老师给我们讲了Quartz2D,它是一个绘图工具在oc语言里设计者想在页面上画东西,必须先准备画板,再准备画布,之后在画布上绘图,最后渲染到屏幕. 开课快两个月了,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学

ios绘图时的坐标处理

在iOS中,进行绘图操作时,一般主要是在UIView:drawRect中调用 UIGraphicsBeginImageContextWithOptions等一系列函数,有时候直接画图就行,比如UIImage的drawRect等,有时候需要进行稍微复杂的操作,比如颜色混合,mask等,需要对CGContextRef进行CTM变换,通过今天查阅资料了解到: UIKit和Quartz 绘图的坐标系统是不一样的,前者原点为左上,后者为左下. 如果是直接使用UIKit的方法进行调用绘图上下文CGConte

IOS绘图探索

参考:http://www.cocoachina.com/industry/20140115/7703.html 参考:http://blog.sina.com.cn/s/blog_6b60259a0101c90g.html 参考原文:http://www.cnblogs.com/xdream86/archive/2012/12/12/2814552.html UIBazier使用参考:http://blog.csdn.net/guo_hongjun1611/article/details/78