分享一个iOS下实现基本绘画板功能的简单方法
代码部分
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
效果图