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


效果图










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

相关文章推荐

Linux Qt应用程序的守护精灵

Linux  Qt应用程序的守护精灵需求点        当我们希望应用程序被意外关闭、中止后,能够立即重新启动,就需要守护精灵来帮忙。     P.S.:不是病毒不是病毒……实现方案   ...

Qt - 与众不同的电子时钟

Qt的电子时钟是个老掉牙的demo了,但是利用lcdNumber显示的样子非常老土(下图第一个显示效果),一看就知道是从qt帮助文档里摘出来的example,毫无新意。           美化一下系...

iOS开发练习小程序——秒表

最近工作不忙,闲暇之余自学了一下object-c,体验了一把ios无敌的framework。想写个小应用练练手,给自己挑了个简单的题目:模仿实现一下ios系统应用时钟里的秒表程序,就是这个应用:主要实...

Qt :非window子窗体的透明度设置

✿问题的由来         心血来潮,想利用QTimer 配合 setWindowOpacity()方法来实现一个窗体淡入的效果。✿实验代码 粗糙的实验代码:void Widget::on_push...

女程共勉:必须证明自己是真正的优秀

女程共勉:必须证明自己是真正的优秀             不得不承认,在这个数量上男性占主导的IT行业,女程序员的工作能力常常遭到质疑。有些企业暗文规定不招女开发,有些企业频频降低招聘要求,抢招女开...

为Android应用程序读取/dev下设备而提权(一)

为Android应用程序读取/dev下设备而提权(一)         倘若应用程序需要对/dev/xxx进行读写操作,就需要提升其权限。提权方法不唯一,需要根据具体需求情况而选择。归根结底,终究都落...

程序一点点地写,日子一天天地过。

我还记得那天我上班正忙,被一团恶心的程序和一堆变态的需求折磨着,我那伟大的母亲大人特地打电话嘱咐我:“新婚姻法告诉我们,男人的车子不可靠了,房子不可靠了,女人必须得靠自己!”  字正腔圆,铿锵有力,顿...

为Android应用程序读取/dev下设备而提权(二)

为Android应用程序读取/dev下设备而提权(二)                  在为Android应用程序读取/dev下设备而提权(一)中,简单总结了提权的两种方法: device...

400% 的飞跃-web 页面加载速度优化实战

前言 一个网站的加载速度有多重要? 反正我相信之前来博主网站的人至少有 50% 在加载完成前关闭了本站。 为啥捏? 看图 首页完整加载时间 8.18s,看来能进来看博主网站的人都是真爱呀,哈哈...

iOS开发入门之——拖动视图

预备知识iOS处理屏幕上的触摸动作,主要涉及到以下几个方法:touchesBegan:withEvent:          //触摸屏幕的最开始被调用touchesMoved:withEvent: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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