iOS应用开发——小画板Demo

代码部分

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  



效果图




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值