你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS三種顏色畫筆和橡皮擦的畫圖板demo

IOS三種顏色畫筆和橡皮擦的畫圖板demo

編輯:關於IOS

demo功能:三種顏色畫筆和橡皮擦的畫圖板demo 【iphone 6.1 測試通過】

demo說明:項目中PaintView.m 是demo的畫板部分,PaintView和三個顏色按鈕添加到ViewController的view中。構成程序主界面。

demo截屏:

 

IOS三種顏色畫筆和橡皮擦的畫圖板demo

 

demo主要代碼:PaintView.m 畫板view部分

 

#import "PaintView.h" 
#import <QuartzCore/QuartzCore.h>  
 
@implementation PaintView 
@synthesize paintColor = _paintColor; 
@synthesize erase; 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
        self.layer.shadowColor = [UIColor blackColor].CGColor; 
        self.layer.shadowOpacity = 0.8; 
        self.layer.shadowOffset = CGSizeMake(5, 5); 
        self.backgroundColor = [UIColor whiteColor]; 
        self.paintColor = [UIColor blackColor]; 
        // Initialization code  
        linesArray = [[NSMutableArray alloc]init]; 
        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self 
                                                                                    action:@selector(panGesture:)]; 
        [self addGestureRecognizer:panGesture]; 
        [panGesture release]; 
    } 
    return self; 
} 
 
- (void)dealloc { 
    [linesArray release]; 
    [_paintColor release]; 
    [super dealloc]; 
} 
 
// Only override drawRect: if you perform custom drawing.  
// An empty implementation adversely affects performance during animation.  
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code  
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 20); 
    //NSLog(@"color:%@",_paintColor);  
 
    for (NSDictionary *lineDic in linesArray) { 
        UIColor *lineColor = [lineDic objectForKey:@"color"]; 
        CGContextSetStrokeColorWithColor(context, lineColor.CGColor); 
        CGMutablePathRef paintPath = CGPathCreateMutable(); 
        NSArray *linePointArray = [lineDic objectForKey:@"line"]; 
        for (NSInteger i=0; i<linePointArray.count; i++) { 
            CGPoint point = [[linePointArray objectAtIndex:i]CGPointValue]; 
            if (i==0) { 
                //CGContextMoveToPoint(context, point.x, point.y);  
                CGPathMoveToPoint(paintPath, NULL, point.x, point.y); 
            }else { 
                //CGContextAddLineToPoint(context, point.x, point.y);  
                CGPathAddLineToPoint(paintPath, NULL, point.x, point.y); 
            } 
        } 
        CGContextAddPath(context, paintPath); 
        CGContextStrokePath(context); 
         
        if ([lineDic objectForKey:@"eraseArray"]) { 
            //NSLog(@"color:%@",lineColor);  
            NSMutableArray *eraseArray = [lineDic objectForKey:@"eraseArray"]; 
            CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor); 
            CGMutablePathRef paintPath = CGPathCreateMutable(); 
            for (NSInteger i=0; i<eraseArray.count; i++) { 
                CGPoint point = [[eraseArray objectAtIndex:i]CGPointValue]; 
                //NSLog(@"erase point:%@",NSStringFromCGPoint(point));  
                if (i==0) { 
                    //CGContextMoveToPoint(context, point.x, point.y);  
                    CGPathMoveToPoint(paintPath, NULL, point.x, point.y); 
                }else { 
                    //CGContextAddLineToPoint(context, point.x, point.y);  
                    CGPathAddLineToPoint(paintPath, NULL, point.x, point.y); 
                } 
            } 
            CGContextAddPath(context, paintPath); 
            CGContextStrokePath(context); 
        } 
    } 
} 
 
 
-(void)panGesture:(UIPanGestureRecognizer*)thePan{ 
    CGPoint touchPoint = [thePan locationInView:self]; 
    if (self.erase) { 
        if (thePan.state==UIGestureRecognizerStateChanged) { 
            for (NSMutableDictionary *lineDic in linesArray) { 
                NSMutableArray *linePointArray = [lineDic objectForKey:@"line"]; 
                for (NSInteger i=0; i<linePointArray.count; i++) { 
                    CGPoint point = [[linePointArray objectAtIndex:i]CGPointValue]; 
                    CGFloat distance = powf(point.x-touchPoint.x,point.y-touchPoint.y); 
                    if (distance<20) { 
                        NSMutableArray *eraseArray; 
                        if ([lineDic objectForKey:@"eraseArray"]) { 
                            eraseArray = [lineDic objectForKey:@"eraseArray"]; 
                        }else { 
                            eraseArray = [NSMutableArray array]; 
                        } 
                        [eraseArray addObject:[NSValue valueWithCGPoint:touchPoint]]; 
                        [lineDic setObject:eraseArray forKey:@"eraseArray"]; 
                        CGRect paintRect = CGRectMake(touchPoint.x-50, touchPoint.y-50, 100, 100); 
                        [self setNeedsDisplayInRect:paintRect]; 
                        //[self setNeedsDisplay];  
                        continue; 
                    } 
                } 
            } 
        } 
        //[self eraseLine:currentLineDic erase:[thePan locationInView:self]];  
    }else { 
        if (thePan.state==UIGestureRecognizerStateBegan) { 
            NSMutableArray *currentLineArray = [NSMutableArray arrayWithObject:[NSValue valueWithCGPoint:touchPoint]]; 
            NSMutableDictionary *lineDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:currentLineArray,@"line",_paintColor,@"color", nil]; 
            [linesArray addObject:lineDic]; 
        }else if(thePan.state==UIGestureRecognizerStateChanged){ 
            NSMutableDictionary *lineDic = [linesArray lastObject]; 
            NSMutableArray *currentLineArray = [lineDic objectForKey:@"line"]; 
            [currentLineArray addObject:[NSValue valueWithCGPoint:touchPoint]]; 
            CGRect paintRect = CGRectMake(touchPoint.x-50, touchPoint.y-50, 100, 100); 
            [self setNeedsDisplayInRect:paintRect]; 
        }else if(thePan.state==UIGestureRecognizerStateEnded){ 
 
        } 
    } 
} 
@end 
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved