代码部分
TouchView.h
- #import <UIKit/UIKit.h>
- @interface TouchView : UIView
- {
- NSMutableArray *points;
- NSArray *points_all;
- CGContextRef context;
- UIColor *paint_clr;
- }
- @property (strong,nonatomic) NSMutableArray *points;
- @property (strong,nonatomic) NSArray *points_all;
- @property (strong,nonatomic) UIColor *paint_clr;
- @end
TouchView.m
- #import "TouchView.h"
- @implementation TouchView
- @synthesize points, points_all, paint_clr;
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- // Initialization code
- paint_clr = [UIColor greenColor];
- }
- return self;
- }
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect
- {
- // Drawing code
- if ((!self.points) || (self.points.count < 2)) {
- return;
- }
- context = UIGraphicsGetCurrentContext();
- //设置画笔粗细
- CGContextSetLineWidth(context, 5.0f);
- //设置画笔颜色
- //[[UIColor blueColor]set ];
- // [paint_clr set];
- //CGContextSetStrokeColorWithColor(context, [[UIColor blueColor]CGColor]);
- CGContextSetStrokeColorWithColor(context, [paint_clr CGColor]);
- //画以前的轨迹
- for (int j = 0 ; j < [self.points_all count]; j++) {
- NSMutableArray *points_tmp = [points_all objectAtIndex:j];
- for (int i = 0;i < [points_tmp count]-1;i++)
- {
- CGPoint point1 = [[points_tmp objectAtIndex:i] CGPointValue];
- CGPoint point2 = [[points_tmp objectAtIndex:(i+1)] CGPointValue];
- CGContextMoveToPoint(context, point1.x, point1.y);
- CGContextAddLineToPoint(context, point2.x, point2.y);
- CGContextStrokePath(context);
- }
- }
- //画这次
- for (int i=0; i < [self.points count]-1; i++) {
- CGPoint point1 = [[self.points objectAtIndex:i] CGPointValue];
- CGPoint point2 = [[self.points objectAtIndex:(i+1)] CGPointValue];
- CGContextMoveToPoint(context, point1.x, point1.y);
- CGContextAddLineToPoint(context, point2.x, point2.y);
- CGContextStrokePath(context);
- }
- }
- //不支持多点触摸
- - (BOOL) isMultipleTouchEnabled
- {
- return NO;
- }
- //创建一个array,并且记录初始ponit
- - (void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event
- {
- self.points = [NSMutableArray array];
- CGPoint pt = [[touches anyObject] locationInView:self];
- [self.points addObject:[NSValue valueWithCGPoint:pt]];
- }
- //移动过程中记录这些points
- //调用setNeedsDisplay,会触发drawRect方法的调用
- - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- {
- CGPoint pt = [[touches anyObject] locationInView:self];
- [self.points addObject:[NSValue valueWithCGPoint:pt]];
- [self setNeedsDisplay];
- }
- - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- {
- NSMutableArray *points_tmp = [[NSMutableArray alloc] initWithArray:self.points];
- if (self.points_all == nil) {
- self.points_all = [[NSArray alloc] initWithObjects:points_tmp, nil];
- }else {
- self.points_all = [self.points_all arrayByAddingObject:points_tmp];
- }
- }
- @end
ViewController.h
- #import <UIKit/UIKit.h>
- @class TouchView;
- @interface ViewController : UIViewController
- {
- TouchView *tv;
- }
- @end
ViewController.m
- #import "ViewController.h"
- #import "TouchView.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- self.view.userInteractionEnabled = YES;
- // TouchView *tv = [[TouchView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 260.0f, 260.0f)];
- tv = [[TouchView alloc]initWithFrame:self.view.frame];
- tv.backgroundColor = [UIColor blackColor];
- [self.view addSubview:tv];
- UISegmentedControl *seg = [[UISegmentedControl alloc] initWithItems:[@"White Red Blue Green Yellow" componentsSeparatedByString:@" "]];
- seg.segmentedControlStyle = UISegmentedControlSegmentCenter;
- seg.tintColor = [UIColor blackColor];
- seg.center = CGPointMake(self.view.center.x, (self.view.bounds.size.height - seg.bounds.size.height));
- [self.view addSubview:seg];
- [seg addTarget:self action:@selector(colorChange:) forControlEvents:UIControlEventValueChanged];
- }
- - (void)viewDidUnload
- {
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- - (void) colorChange: (UISegmentedControl *) seg
- {
- switch ([seg selectedSegmentIndex])
- {
- case 0:
- tv.paint_clr = [UIColor whiteColor];
- break;
- case 1:
- tv.paint_clr = [UIColor redColor];
- break;
- case 2:
- tv.paint_clr = [UIColor blueColor];
- break;
- case 3:
- tv.paint_clr = [UIColor greenColor];
- break;
- case 4:
- tv.paint_clr = [UIColor yellowColor];
- break;
- default:
- break;
- }
- }
- @end