還有很多功能可以加,記在這裡留著慢慢加吧。
代碼部分
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