iOS应用开发——小画板Demo

原创 2012年03月29日 16:57:10

     还有很多功能可以加,记在这里留着慢慢加吧。


代码部分

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


效果图










版权声明:本文为博主原创文章,未经博主允许不得转载。

Swift-贝赛尔曲线实现画图板 && 截图保存到相册中

本文内容参考自 传送门。原文是用 OC 写的,我把它改成了 Swift 的。 我们先来看看效果图: 第一幅图是我们画了一个 “iOS” 的图像,第二幅图是我们点击保存成功,第三幅图是可以在相册中看...
  • qq_18425655
  • qq_18425655
  • 2016年05月07日 17:39
  • 2555

Swift 全功能的绘图板开发

转载请注明出处:http://blog.csdn.net/zhangao0086/article/details/43836789。 要做一个全功能的绘图板,至少要支持以下这些功能: 支持铅笔绘图(...
  • zhangao0086
  • zhangao0086
  • 2015年03月29日 21:20
  • 15524

如何用Swift制作一个简单的画板APP

怎样用Swift的UIKit制作一个简单的画板APP???                                                  ---翻译自https://www.ray...
  • philar2016
  • philar2016
  • 2016年09月08日 11:10
  • 1380

IOS Swift3 基本图形绘制

import UIKit class ViewController: UIViewController {     override func viewDidLoad() {         ...
  • appiox8
  • appiox8
  • 2017年05月26日 23:41
  • 1221

Swift 基本图形

//获取用语描画的全局对象         var context = UIGraphicsGetCurrentContext()                  //设定颜色         CG...
  • gishero
  • gishero
  • 2015年02月28日 10:13
  • 2992

iOS画板实现第二波

画板实现第二波1.将对图片添加一系列手势操作,原有实现不能实现 以前详细说明个六种手势在控件上的操作(手势只能添加在控件上) 对原有代码进行改造 1.1添加一个图片处理的VIEW-(void) ima...
  • u011252234
  • u011252234
  • 2016年07月04日 09:29
  • 407

iOS_DrawView_画板01_Swift

效果: 基本代码: // DrawingBoard 画板 class DrawingBoard: UIView { /// 线宽 var lineWidth:...
  • hzdg360
  • hzdg360
  • 2016年11月30日 10:46
  • 264

Swift编写的一些完整的app

收集了一些实用swift编写的app,这些demo都是不错的值得学习的。 知乎日报        Swift-ZhihuDaily Swift版知乎日报 参照了YANGReal的糗事百科和uit...
  • zss_ing
  • zss_ing
  • 2015年01月20日 09:53
  • 1165

Swift3.0学习实践-一个简单的画板(七色轨迹、可撤销、可清除、带橡皮擦)

写着玩儿的小程序,继续学习swift,运行效果+代码+知识点总结 运行效果:             代码: Canvas类:画布,画图板状态管理、交互、处理手势 class Canvas:UIVi...
  • zhaochen_009
  • zhaochen_009
  • 2017年02月09日 16:12
  • 1766

Swift 实践之绘画

绘画工程目录这里都使用Storyboard,方便而又快捷. 绘画的相关介绍 /* 1 CGContextMoveToPoint 开始画线 2 CGContextAddL...
  • qq_29284809
  • qq_29284809
  • 2016年03月17日 18:04
  • 2191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS应用开发——小画板Demo
举报原因:
原因补充:

(最多只允许输入30个字)