軟件繪圖會消耗相當大的內(nèi)存,但是由于項目需要還是要制作出,最近小編都在學習關于這方面的內(nèi)容,下面就跟著武林技術頻道小編的步伐來簡單介紹iOS下實現(xiàn)基本繪畫板功能吧,希望對你學習有幫助!
簡單介紹iOS下實現(xiàn)基本繪畫板功能
代碼部分
TouchView.h
#import ?
?
@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 ??????? 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 ??????? NSMutableArray *points_tmp = [points_all objectAtIndex:j];?
?????????????
??????????? for (int i = 0;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 ??????? 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;?
}?
?
//創(chuàng)建一個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?
//調(diào)用setNeedsDisplay,會觸發(fā)drawRect方法的調(diào)用?
- (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 ?
?
@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?
?
效果圖

上文是武林技術頻道小編簡單介紹iOS下實現(xiàn)基本繪畫板功能,感興趣的朋友們可以繼續(xù)關注武林技術頻道哦!