广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    分享一个iOS下实现基本绘画板功能的简单方法

    2018-04-04 08:34:49 次阅读 稿源:互联网
    广告

    代码部分
    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 

    效果图

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告