如何绘制一个矩形

添加一个属性

@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;

CGContextRef 绘图的更多相关文章

  1. iOS_Quartz 2D绘图

    目  录: 一.基础知识掌握 二.Quartz 2D绘图基础:CGContextRef实现简单地绘制图形 三.CGContextRef实现文字.图片.基于路径的图形绘制 四.在内存中绘制位图 五.添加 ...

  2. iOS绘图CGContextRef详解

    转自:http://blog.csdn.net/u014286994/article/details/51333118 /* CoreGraphics - CGContext.h */ /** Gra ...

  3. iOS CGContextRef/UIBezierPath(绘图)

    绘图的底层实现方法 注意:在drawRect方法中系统会默认创建一个上下文(C语言类型)在其他方法中不会有这样一个上下文(可以自己测试) @implementation DrawView //注意,在 ...

  4. iOS 2D绘图 (Quartz2D)之Transform(CTM,Translate,Rotate,scale)

    前言:Quartz默认采用设备无关的user space来进行绘图,当context(画板)建立之后,默认的坐标系原点以及方向也就确认了,可以通过CTM(current transformation ...

  5. iOS 2D绘图 (Quartz2D)之路径(stroke,fill,clip,subpath,blend)

    像往常一样 这个系列的博客是跟着大神的脚步来的.按照往例 在此贴出原博客的出处: http://blog.csdn.net/hello_hwc?viewmode=list我对大神的崇拜之情 如滔滔江水 ...

  6. iOS 2D绘图 (Quartz 2D) 概述

    本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=list 由于自己的项目需要,从网络上下载了许多关于绘制图形的demo,只是用在自己的项目中,很多地方 ...

  7. 1.1 Quartz 2D 绘图

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书”   Quartz2D 绘图主要步骤:   1. 获取[图形上下文]对象 —— (拿到草稿纸 ...

  8. IOS 绘图教程Quartz2D

    http://www.cocoachina.com/industry/20140115/7703.html http://www.cnblogs.com/wendingding/p/3803020.h ...

  9. iOS CGContextRef画图时的常用方法

    UIView的drawRect方法 CoreGraphics绘图 综述:描述系统会调用UIView的drawRect方法,所以coreGraphics的所有实现代码放在该函数内,setNeedsDis ...

随机推荐

  1. javascript钩子机制

    钩子机制是这样的,大家按照某一规则写一个方法(这个规则在方法名称上),然后页面加载完之前,统一执行所有的钩子函数. 注意callHooks方法,里面的局部变量s就是钩子函数名称中一定要有的内容.——这 ...

  2. SDR 研究

    最近终于买了一个RTL2832u 电视棒,可以软件无线电了 使用我的小米3开发板 (安卓6.0),直接在应用商店里搜索 "sdr",到豌豆荚中,就有“RTL驱动程序” 点击下载安装 ...

  3. 正则验证 手机号 QQ号和邮箱

    + (BOOL) validateEmail:(NSString *)email{    NSString *emailRegex = @"^[\\w-]+(\\.[\\w-]+)*@[\\ ...

  4. fancybox 最基本的使用步骤

    初步使用第一步 :引用js和样式 第二步 :设定要触发显示的元素(a标签,链接href指向div的id)  <div><a href="#adddivtest" ...

  5. 根据滑动显隐状态栏的iOS实现

    之前很多兄弟问如何实现类似于淘宝客户端搜索列表那种动态显隐的效果,这几天刚好有时间,就实现了几个例子搞一下,其实原理很简单,也参考了github上一位兄弟的实现.不多说,上代码 @interface ...

  6. iOS 的基本框架

    在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像.声音文件等其他资源.共享资源库定义应用程序可以调用的函数和方法.    iOS为应用程序开发提供了许多可使用 ...

  7. yii使用MongoDB作为数据库服务软件[win7环境下](1)

    1.进入http://php.net,在站内搜索栏搜索mongodb,查看相关的安装步骤信息. 2.找到相应的php.ini配置文件,使用wampserver等服务器软件时,千万不要找错了php.in ...

  8. 关于 MAXScript 拷贝文件夹及内容到其他位置

    之前用 hiddenDOSCommand 本机测试通过,但是换其他电脑有时会不能用... fn xcopy oldfile newfile = ( newfilepath = newfile + &q ...

  9. 《统计推断(Statistical Inference)》读书笔记——第3章 统计分布族

    在科学研究中最重要的两种思维范式是“简化”和“还原”,所谓“简化”是指人依据不太复杂的,可理解的规律认识世界:所谓“还原”是指任何复杂的现象归根结底可以由若干简单的机制解释.各种统计分布族就是统计学中 ...

  10. SCRUM项目 5.0

    5.0--------------------------------------------------- 1.团队成员完成自己认领的任务. 2.燃尽图:理解.设计并画出本次Sprint的燃尽图的理 ...