iOS应用开发——小画板Demo

还有很多功能可以加,记在这里留着慢慢加吧。


代码部分

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


效果图










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值