CGContextRef 绘图

如何绘制一个矩形

添加一个属性

@property(nonatomic,strong) NSString* RectNumber;

1. 首先重写UIview的drawRect方法

- (void)drawRect:(CGRect)rect {
    
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    int number = [self.RectNumber intValue];
    int x = 50;
    int y = 0;
    
    CGContextBeginPath(ctx);
    //设置图形间距
    for (int i=0; i<number; i++) {
        if (i%3 == 0) {
            y+=100;
            x=50;
        }
        [self AddRect:ctx leftPoint:x rightPoint:y width:90 height:50];
        x+=100;
    }
    
    CGContextSetRGBStrokeColor(ctx, 0.5, 0, 0, 1);
    CGContextSetRGBFillColor(ctx, 0, 1, 0, 1);
    CGContextDrawPath(ctx, kCGPathEOFillStroke);
    //打开路径
    CGContextStrokePath(ctx);
    //关闭路径
    CGContextClosePath(ctx);

}

2. 实现自定义方法

-(void)AddRect:(CGContextRef)r leftPoint:(CGFloat)x1 rightPoint:(CGFloat)x2 width:(CGFloat)w height:(CGFloat)h
{
    CGContextMoveToPoint(r, x1, x2);
    //添加一条连接到右上角的线
    CGContextAddLineToPoint(r, x1+w, x2);
    //添加一条连接到右下角的先
    CGContextAddLineToPoint(r, x1+w, x2+h);
    //添加一条连接到左下角的线
    CGContextAddLineToPoint(r, x1, x2+h);
    //添加一条连接到左上角的线
    CGContextAddLineToPoint(r, x1, x2);
}

3添加一个生成按钮

field2 = [[UITextField alloc]initWithFrame:CGRectMake(50, 150, 200, 40)];
    field2.placeholder = @"输入要多少个矩形";
    [self.view addSubview:field2];
    
    btn2 = [UIButton buttonWithType:UIButtonTypeCustom];
    btn2.frame = CGRectMake(100, 200, 80, 40);
    [btn2 setTitle:@"生成" forState:UIControlStateNormal];
    [btn2 setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [btn2 addTarget:self action:@selector(click3) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn2];
    self.view.backgroundColor = [UIColor whiteColor];

4 viewController 里实现生产方法

curRect = [[CurRectView alloc]initWithFrame:self.view.frame];
    curRect.backgroundColor = [UIColor whiteColor];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(click4)];
    [curRect addGestureRecognizer:tap];
    curRect.RectNumber = field2.text;
    [self.view addSubview:curRect];

5 手势移除视图
    [curRect removeFromSuperview];

如何绘制五角星

添加一个属性

@property (nonatomic,strong) NSString *starNumber;

1. 首先重写UIview的drawRect方法

-(void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    int number = [self.starNumber intValue];
    int x = 50;
    int y = 0;
    
    CGContextBeginPath(ctx);
    //设置图像间距
    for (int i=0; i<number; i++) {
        if (i%4 == 0) {
            y+=100;
            x=50;
        }
        [self CGContextAddStar:ctx starCount:5 starX:x starY:y starSize:50];
        x+=100;
    }
    //图形边框颜色
    CGContextSetRGBStrokeColor(ctx, 0, 1, 0, 1);
    //设置填充颜色
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    CGContextDrawPath(ctx, kCGPathEOFillStroke);

//打开路径
    CGContextStrokePath(ctx);
    //关闭路径
    CGContextClosePath(ctx);
}

2. 实现自定义方法

-(void)CGContextAddStar:(CGContextRef)c starCount:(NSInteger)n starX:(CGFloat)dx starY:(CGFloat)yx starSize:(NSInteger)size
{
    //m_pi 是圆周率
    CGFloat dig = 4*M_PI/n;
    //移动到制定点
    CGContextMoveToPoint(c, dx, yx+size);
    for (int i = 1; i<=n; i++) {
        CGFloat x = sin(i*dig);
        CGFloat y = cos(i*dig);
        //绘制从当前点到制定点的线条
        CGContextAddLineToPoint(c, x*size+dx, y*size+yx);
        
    }
}

3添加一个生成按钮

field1 = [[UITextField alloc]initWithFrame:CGRectMake(50, 50, 200, 40)];
    field1.placeholder = @"输入要多少个五角星";
    [self.view addSubview:field1];
    
    btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    btn1.frame = CGRectMake(100, 100, 80, 40);
    [btn1 setTitle:@"生成" forState:UIControlStateNormal];
    [btn1 setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(click1) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn1];
    self.view.backgroundColor = [UIColor whiteColor];

4 viewController 里实现生产方法

cur = [[CurView alloc]initWithFrame:self.view.frame];
    cur.backgroundColor = [UIColor whiteColor];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(click2)];
    [cur addGestureRecognizer:tap];
    cur.starNumber = field1.text;
    [self.view addSubview:cur];

5 手势移除视图

[cur removeFromSuperview];

注 :viewcontroller 里添加全局变量

UITextField *field1,*field2;
    UIButton *btn1,*btn2;
    CurView *cur;
    CurRectView *curRect;

时间: 2024-10-11 07:02:30

CGContextRef 绘图的相关文章

1 、Quartz 2D绘图基础

Quartz 2D绘图 Quartz 2D绘图的核心API是CGContextRef,该API专门用于绘制各种图形. 关注微信公众号:ioscoding ,分享优质iOS编程技术.by:shuju 1.1  Quartz 2D绘图基础:CGContextRef 使用Quartz 2D绘图的关键步骤有两步:获取CGContextRef:调用CGContextRef的方法进行绘图. 不同场景下获取CGContextRef的方式各不相同,下面介绍iOS开发中最常见的场景下如何获取CGContextRe

iOS绘图CGContextRef详解

转自:http://blog.csdn.net/u014286994/article/details/51333118 /* CoreGraphics - CGContext.h */ /** Graphics state functions. **/ //为了让开发者在进行坐标变换时无须计算多次坐标变换后的累加结果,Quartz 2D还提供了如下两个方法来保存.恢复绘图状态 /* 保存CGContextRef当前的绘图状态,方便以后恢复该状态*/ void CGContextSaveGStat

CGContextRef使用简要教程

Graphics Context是图形上下文,也能够理解为一块画布,我们能够在上面进行绘画操作,绘制完毕后,将画布放到我们的view中显示就可以,view看作是一个画框. CGContextRef功能强大.我们借助它能够画各种图形. 开发过程中灵活运用这些技巧,能够帮助我们提供代码水平. 说到绘图.我就立刻想到:我的数学公式都快忘完了. 高中数学你还记得多少? 我记得我上学的时候.数学一直都非常好. 以至于在班里都不敢和别人吵吵闹闹.一吵吵闹闹.别人就会来一句:以为你数学好.就能够怎么样怎么样了

iOS之在内存中绘图

与直接在UIView控件上绘图不同,在内存中绘图时,需要开发者自己准备绘图环境,Quartz 2D提供了一个非常便捷的函数:UIGraphicsBeginImageContext(CGSize size),该函数用于准备绘图环境.当图形绘制完成后,可调用UIGraphicsEndImageContext()函数结束绘图和关闭绘图环境. 总结来说,在内存中绘图的步骤如下. 调用UIGraphicsBeginImageContext(CGSize size)函数准备绘图环境. 调用UIGraphic

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既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在对绘制的图形做了绘制阴影处理前,需要先对上下文进行保存,绘制阴影成功后,还要对上下文进行复位.目的是为了不影响后面的绘图操作. 举例的阴影绘制实例如下: 1.自定义一个视图类DemoView,并将控制器的视图关联该自定义类,同时在该定义类中重写- (void)drawRect:(CGRect)rect,将绘制无阴影图形和绘制阴影图形的调用方法写在里面.     

Quartz绘图使用示例

概要 本章主要简示了使用IOS的绘图Quartz,包括简单的画直线.图片.文字.圆.矩形.贝塞尔曲线,包括一些基本使用方法. 结果展示 流程概要 1.绘图好像直接在UIView类里面绘制的,在控制类里面绘制没有尝试. 2.新建一个基于UIView的类,发现新建类里面自动生成了drawRect方法,直接在这个方法里面写代码即可自动被调用 3.注意绘图时是先绘制路径,然后使用画图函数(eg.CGContextDrawPath,CGContextFillPath等)才能在界面上显示. 主要代码 基于U

iOS_41_绘图

Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境. 使用Quartz 2D API可实现许多功能,如基本路径的绘制.透明度.描影.绘制阴影.透明层.颜色管理.反锯齿.PDF文档生成和PDF元数据访问. 在需要的时候,Quartz 2D还可以借助图形硬件的功能. 在Mac OS X中,Quartz 2D可以与其它图形图像技术混合使用, 如Core Image.Core Video.OpenGL.QuickTime. 例如,通过使用 QuickTime的Graphics

iOS开发系列--绘图与滤镜全面解析

概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图形绘图框架进行介绍:Quartz 2D绘制2D图形和Core Image中强大的滤镜功能. Quartz 2D 基本图形绘制 视图刷新 其他图形上下文 Core Image Quartz 2D 在iOS中常用的绘图框架就是Quartz 2D,Quartz 2D是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.Quartz 2D在UI