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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nsarray
, context
, nsmutablearray
, nsvalue
, point
, uicolor
, cgpoint
, nsset
, cgcontextref
, ios服务器strong swanvpn
Self
,以便于您获取更多的相关知识。

时间: 2024-07-30 13:27:30

iOS应用开发:小画板Demo的相关文章

5人iOS开发小团队的生存发展之道

近年来,iOS用户日益增多,许多中小企业力图从App Store中谋求发展之道.在市场竞争日趋激烈的今天,如何能令一个5人开发小团队站稳脚跟,在保证企业生存的前提下,发展成为一支独具特色的创新队伍呢?近日,在"知乎"网上,专业人士们对此展开了讨论. 第一,尽可能找大型机构合作.有过创业经历的人都深知,小型企业在起步阶段往往面临融资难,技术不成熟,缺乏运作经验等问题.如果与资金实力雄厚的大型机构合作完成第一个项目,或许能够帮助团队掘到第一桶金.同时,也有利于建立与大型机构的长期合作关系.

IOS游戏开发之五子棋OC版_IOS

先上效果图 - 功能展示 - 初高级棋盘切换效果 实现思路及主要代码详解 1.绘制棋盘 利用Quartz2D绘制棋盘.代码如下 - (void)drawBackground:(CGSize)size{ self.gridWidth = (size.width - 2 * kBoardSpace) / self.gridCount; //1.开启图像上下文 UIGraphicsBeginImageContext(size); //2.获取上下文 CGContextRef ctx = UIGraph

iOS多线程开发——NSThread浅析_IOS

在iOS开发中,多线程的实现方式主要有三种,NSThread.NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,为了学习的完整性,今天我们主要从代码层面来实现NSThread的使用.案例代码上传至 https://github.com/chenyufeng1991/NSThread. (1)初始化并启动一个线程 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated

《iOS应用开发》——2.3节内存管理

2.3 内存管理 iOS应用开发 我不是吓唬你们.在iOS 5.0系统之前,内存管理毫无疑问是iOS开发最困难的部分.简而言之,问题是这样的.无论何时你创建了一个变量,你就要在内存中给它分配一定的空间.对于局部变量来说,我们通常使用栈上的内存,这些内存是自动管理的,当函数返回时,函数中定义的任何局部变量都会从内存中自动删除. 这听起来很棒,但是栈有两个严重的局限.首先,它的空间非常有限,如果用尽了内存,应用程序就会崩溃.其次,这些变量很难共享.请记住,函数使用值传参和返回.这意味着所有传入函数或

iOS视频流开发(1)—视频基本概念

手机比PC的优势除了便携外,她最重要特点就是可以快速方便的创作多媒体作品.照片分享,语音输入,视频录制,地理位置.一个成功的手机APP从产品形态上都有这其中的一项或多项,比如instagram,微信.如果把Web2.0的交互体验照搬到手机上就是死路一条. 微视频可以说把手机的视频录制和碎片时间两个特点发挥到了极致,视频相关的APP现在无温不火的原因我认为跟坑爹的运营商有关.虽然现在移动网络流量小速度慢,但是不妨碍我们先把技术积累做起来. 视频实质: 纯粹的视频(不包括音频)实质上就是一组帧图片,

《iOS应用开发》——1.1节iOS系统简介

1.1 iOS系统简介 iOS应用开发 如果这是你第一次接触iOS开发,欢迎你来到一个激动人心的新世界.iOS阵营提供了一些强大的设备待你探究.尤其是iPhone,它聚集了很多令人兴奋的技术,包括持续在线的因特网.地理定位.运动传感,以及照相功能.就在不久的过去,开发者们如果要尝试这些技术,要么需要自己创建定制的硬件,要么花好几万美元购买.而现在你可以将所有这些技术整个装进你的口袋并且随身携带. iPhone的硬件带来了先前无法想象的机会.革命性的新型社交网络应用程序占主导地位,地理定位应用已经

《iOS 8开发指南》——第6章,第6.2节Xcode中的MVC

6.2 Xcode中的MVC iOS 8开发指南 在用Xcode编程并在Interface Builder中安排用户界面(UI)元素后,Cocoa Touch的结构旨在利用MVC(Model-View-Controller,模型-视图-控制器)设计模式.在本节的内容中,将讲解Xcode中MVC模式的基本知识. 6.2.1 原理 MVC模式会将Xcode项目分为如下3个不同的模块. 1.模型 模型是应用程序的数据,比如项目中的数据模型对象类.模型还包括采用的数据库架构,比如Core Data或者直

《iOS 8开发指南(第2版)》——第6章,第6.2节Xcode中的MVC

6.2 Xcode中的MVC iOS 8开发指南(第2版) 在用Xcode编程并在Interface Builder中安排用户界面(UI)元素后,Cocoa Touch的结构旨在利用MVC(Model-View-Controller,模型-视图-控制器)设计模式.在本节的内容中,将讲解Xcode中MVC模式的基本知识. 6.2.1 原理 MVC模式会将Xcode项目分为如下3个不同的模块. 1.模型 模型是应用程序的数据,比如项目中的数据模型对象类.模型还包括采用的数据库架构,如Core Dat

Cocos2d-x跨Android&amp;amp;iOS平台开发入门

很好的一篇译文,在此感谢原作者和译者.由于此文写的很早,所以文中提到的一些工具已经升级了,有了一些新的界面和操作,但大体还是能和新版本联系起来的. 原文地址:http://www.cocoachina.com/gamedev/gameengine/2012/0428/4206.html   Cocos2D是一个非常棒而且非常容易使用的游戏框架,但是,由于它是基于objc语言的,所以你只能使用它来开发ios和mac下面的游戏.   假如你可以使用和cocos2d相似的api来开发android上面