分享一个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  

效果图

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。