首页 > 代码库 > 涂鸦-每次调setNeedsDisplay以后就会重新调用一次drawRect方法,每次调drawRect方法就会把之前画好的东西删掉
涂鸦-每次调setNeedsDisplay以后就会重新调用一次drawRect方法,每次调drawRect方法就会把之前画好的东西删掉
//
// WJView.m
// zwj涂鸦
//
// Created by zwj on 14-9-9.
// Copyright (c) 2014年 zwj. All rights reserved.
//
#import "WJView.h"
@interface WJView()
@property(nonatomic,strong) NSMutableArray *allPaths;
@end
@implementation WJView
- (void)backto{
[self.allPaths removeLastObject];
[self setNeedsDisplay];
}
- (void)clearScreen{
[self.allPaths removeAllObjects];
[self setNeedsDisplay];
}
-(NSMutableArray *)allPaths{
if (_allPaths == nil) {
_allPaths = [NSMutableArray array];
}
return _allPaths;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:touch.view];
NSMutableArray *aryCurrentP = [NSMutableArray array];
[aryCurrentP addObject:[NSValue valueWithCGPoint:currentPoint]];
[self.allPaths addObject:aryCurrentP];
[self setNeedsDisplay];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint currentP = [touch locationInView:touch.view];
NSMutableArray *ary = [self.allPaths lastObject];
[ary addObject:[NSValue valueWithCGPoint:currentP]];
[self setNeedsDisplay];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint currentP = [touch locationInView:touch.view];
NSMutableArray *ary = [self.allPaths lastObject];
[ary addObject:[NSValue valueWithCGPoint:currentP]];
[self setNeedsDisplay];
}
/**
* 绘制图形
*/
-(void)drawRect:(CGRect)rect{
CGContextRef ref = UIGraphicsGetCurrentContext();
for (NSMutableArray *ary in self.allPaths) {
for (int i = 0; i < ary.count; i++) {
if (i == 0) {
CGPoint firstPoint = [ary[i] CGPointValue];
CGContextMoveToPoint(ref, firstPoint.x, firstPoint.y);
} else {
CGPoint movePoint = [ary[i] CGPointValue];
CGContextAddLineToPoint(ref, movePoint.x, movePoint.y);
}
}
}
CGContextSetLineJoin(ref, kCGLineJoinRound);
CGContextSetLineWidth(ref, 5);
CGContextStrokePath(ref);
}
@end
涂鸦-每次调setNeedsDisplay以后就会重新调用一次drawRect方法,每次调drawRect方法就会把之前画好的东西删掉