TouchView.h
#import@interface TouchView : UIView{ NSMutableArray * _lineArray;}//初始化线条颜色@property (nonatomic,retain)UIColor * pointColor;@end
TouchView.m
#import "TouchView.h"#define REDTAG 10#define YELLOWTAG 11#define ORANGETAG 12 #define GREENTAG 13#define PURPLETAG 14@implementation TouchView- (void)dealloc { [_lineArray release]; _lineArray = Nil; [_pointColor release]; _pointColor = Nil; [super dealloc];}- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code _lineArray = [[NSMutableArray alloc]init]; //初始化颜色为黑色 _pointColor = [UIColor blackColor]; //删除按钮 UIButton * del = [[UIButton alloc]initWithFrame:CGRectMake(0, 330, 250, 20)]; [del setBackgroundColor:[UIColor brownColor]]; [del setTitle:@"撤销" forState:UIControlStateNormal]; [del addTarget:self action:@selector(delAction) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:del]; [del release]; //颜色按钮 UIButton * redButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 350, 50, 50)]; [redButton setBackgroundColor:[UIColor redColor]]; redButton.tag = REDTAG; [redButton addTarget:self action:@selector(colorAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:redButton]; [redButton release]; UIButton * yellowButton = [[UIButton alloc]initWithFrame:CGRectMake(50, 350, 50, 50)]; [yellowButton setBackgroundColor:[UIColor yellowColor]]; yellowButton.tag = YELLOWTAG; [yellowButton addTarget:self action:@selector(colorAction:)forControlEvents:UIControlEventTouchUpInside]; [self addSubview:yellowButton]; [yellowButton release]; UIButton * orangeButton = [[UIButton alloc]initWithFrame:CGRectMake(100, 350, 50, 50)]; [orangeButton setBackgroundColor:[UIColor orangeColor]]; orangeButton.tag = ORANGETAG; [orangeButton addTarget:self action:@selector(colorAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:orangeButton]; [orangeButton release]; UIButton * greenButton = [[UIButton alloc]initWithFrame:CGRectMake(150, 350, 50, 50)]; [greenButton setBackgroundColor:[UIColor greenColor]]; greenButton.tag = GREENTAG; [greenButton addTarget:self action:@selector(colorAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:greenButton]; [greenButton release]; UIButton * purpleButton = [[UIButton alloc]initWithFrame:CGRectMake(200, 350, 50, 50)]; [purpleButton setBackgroundColor:[UIColor purpleColor]]; purpleButton.tag = PURPLETAG; [purpleButton addTarget:self action:@selector(colorAction:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:purpleButton]; [purpleButton release]; } return self;}//按钮点击事件- (void)colorAction:(id)sender{ UIButton * button = (UIButton *)sender; switch (button.tag) { case REDTAG: { _pointColor = [UIColor redColor]; } break; case YELLOWTAG: { _pointColor = [UIColor yellowColor]; } break; case ORANGETAG: { _pointColor = [UIColor orangeColor]; } break; case GREENTAG: { _pointColor = [UIColor greenColor]; } break; case PURPLETAG: { _pointColor = [UIColor purpleColor]; } break; default: break; }}//4个方法进入.h中点UIView,点UIResponder进入找- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch * touch = [touches anyObject];//获取触摸动作 CGPoint point = [touch locationInView:self];//获得初始坐标 NSValue * value = [NSValue valueWithCGPoint:point];//结构体转换成对象;也能用于把对象转换成结构体,这是固定格式; NSMutableArray * points = [NSMutableArray array];//局部变量 遍历构造器不用释放 [points addObject:value];// NSMutableDictionary * dic = [NSMutableDictionary dictionary]; [dic setObject:points forKey:@"points"]; [dic setObject:_pointColor forKey:@"color"]; [_lineArray addObject:dic];//将字典放到数组线中 }- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch * touch = [touches anyObject]; CGPoint ponit = [touch locationInView:self]; NSValue * value = [NSValue valueWithCGPoint:ponit]; // NSMutableArray * points = [_lineArray lastObject];//取出线数组里最后一个元素// // [points addObject:value];//把移动坐标放到线数组里 NSMutableDictionary * dic = [_lineArray lastObject];// NSMutableArray * points = [dic objectForKey:@"points"];//从大字典里取出数组 [points addObject:value];//往小数组里添加所有点 [self setNeedsDisplay];//调用下面画图方法;系统不允许用drawRect,用setNeedsDisplay手动调用}- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ }- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ }//删除事件- (void)delAction{ [_lineArray removeLastObject];//移除最后一划 [self setNeedsDisplay];}// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect{ // Drawing code CGContextRef context = UIGraphicsGetCurrentContext(); for (NSDictionary * lineDic in _lineArray) { NSArray * line = [lineDic objectForKey:@"points"]; NSValue * firstValue = [line firstObject];//得到起始点 CGPoint firstPoint = [firstValue CGPointValue];//转换为Point类型;正常数据转换 UIColor * color = [lineDic objectForKey:@"color"]; CGContextSetStrokeColorWithColor(context, color.CGColor); CGContextMoveToPoint(context, firstPoint.x, firstPoint.y);//起始点 for (NSValue * value in [lineDic objectForKey:@"points"]) { CGPoint currentPonit = [value CGPointValue]; CGContextAddLineToPoint(context, currentPonit.x, currentPonit.y); } CGContextStrokePath(context); }}@end