首页 > 代码库 > IOS 简单画图显示

IOS 简单画图显示

     首先平台的搭建和前面是一样的,创建好根视图

     接下来新建一个类即视图是UIView类型命名为MyView

     在RootViewController.h文件中导入MyView的头文件

     在RootViewController.m文件中

 
- (void)viewDidLoad
{
    //因为RootViewController自带了一个view,让MyView的view和RootViewController的view一样
    MyView *myView = [[MyView alloc]initWithFrame:self.view.frame];
    self.view = myView;
    
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
-(void)viewDidLoad

      在MyView.h文件中

   //声明一个线数组用来保存点数组
    NSMutableArray *linesArr;
    //声明颜色
    UIColor *penColor;

      在MyView.m文件中

      画图有两点:1,要有触摸事件;2,要有绘图方法

      所以: 

      第一个为开始触摸的方法 

//开始触摸
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //声明一个点数组用来保存所有的点
    NSMutableArray *pointArr = [[NSMutableArray alloc]init];
    UITouch *touch = [touches anyObject];//得到当前touch的值
    CGPoint beganPoint = [touch locationInView:self];//得到当前位置上的点 是结构体类型
    [pointArr addObject:penColor];//让第一元素储存画笔颜色
    [pointArr addObject:[NSValue valueWithCGPoint:beganPoint]];//把当前位置上的点添加到数组上 NSValue对象类型
    [linesArr addObject:pointArr];//把点数组添加到线数组上
    
}

     第二个为触摸过程的移动的方法

//触摸移动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint movedPoint = [touch locationInView:self];
     NSMutableArray *pointArr = [linesArr lastObject];//从线数组里面把点数组拿到
    [pointArr addObject:[NSValue valueWithCGPoint:movedPoint]];//把触摸移动的所有的点添加到数组上
    
    [self setNeedsDisplay];//调用drawRect方法
    
}

   第三个为触摸结束:

  

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"触摸结束");
}

  在初始化函数中:

 

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        
        //设置MyView的背景颜色
        self.backgroundColor = [UIColor grayColor];
        
        //初始化线数组
        linesArr = [[NSMutableArray alloc]init];
        
        //初始化颜色
        penColor = [UIColor redColor];
        
        //添加按钮
        NSArray *titlesArr = [[NSArray alloc]initWithObjects:@"",@"",@"",@"绿",@"",@"",@"",@"撤销", nil];
        for (int i=0; i<8; i++) {
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [btn setTitle:[titlesArr objectAtIndex:i] forState:UIControlStateNormal];
            [btn setTag:101+i];
            btn.frame = CGRectMake(40*i, 460-30, 40, 30);
            [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:btn];
        }
        
        
    }
    return self;
}

  关联方法btnAction方法中:

  

-(void)btnAction:(id)sender
{
    UIButton *btn = (UIButton*)sender;
    switch (btn.tag) {
        case 101:
            penColor = [UIColor redColor];
            break;
        case 102:
            penColor = [UIColor orangeColor];
            break;
        case 103:
            penColor = [UIColor yellowColor];
            break;
        case 104:
            penColor = [UIColor greenColor];
            break;
        case 105:
            penColor = [UIColor cyanColor];
            break;
        case 106:
            penColor = [UIColor blueColor];
            break;
        case 107:
            penColor = [UIColor purpleColor];
            break;
            
        default:
            [linesArr removeAllObjects];//移除
            [self setNeedsDisplay];//重绘
            break;
    }
}

  最后一步绘图:

 

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    
    for (int j=0; j<[linesArr count]; j++) {
        
        NSMutableArray *pointArr = [linesArr objectAtIndex:j];
        //防止进入死循环
        if ([pointArr count]>0) {
            //让第一元素储存画笔颜色,所有循环从第二个元素开始
            for (int i=1; i<[pointArr count]-1; i++) {
                
                UIColor *strokeColor = [pointArr objectAtIndex:0];//得到一个元素也就是penColor = [UIColor redColor];红色
                
                CGContextRef context = UIGraphicsGetCurrentContext();//拿到画笔上下文
                CGContextSetStrokeColorWithColor(context,strokeColor.CGColor);//设置画笔的颜色
                CGContextSetLineWidth(context, 1.0);//设置画笔的粗细
                
                CGPoint beginPoint = [[pointArr objectAtIndex:i]CGPointValue];//得到开始的点
                CGPoint endPoint = [[pointArr objectAtIndex:i+1]CGPointValue];//得到最后的点
                
                CGContextMoveToPoint(context, beginPoint.x, beginPoint.y);//设置开始点的位置
                CGContextAddLineToPoint(context, endPoint.x, endPoint.y);//画一条到某点的线
                CGContextStrokePath(context);//开始绘制
            }
            
        }

    }
        
    
}

  结果显示: