`
toyota2006
  • 浏览: 552344 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

画板使用

阅读更多
Painting.h
#import <UIKit/UIKit.h>

//CONSTANTS:

#define kRubberWidth              20
#define kBrushLineAlpha           1.0
#define kPaintViewBackGroudImg    @"背景.png"

@interface Painting : UIView {
	UIImageView *drawImage;
	int mouseMoved;
	BOOL mouseSwiped;
	BOOL isRubber;
	CGPoint lastPoint;
	CGFloat kBrushRGBColorRed;
	CGFloat kBrushRGBColorGreen;
	CGFloat  kBrushRGBColorBlue;
	CGFloat  kBrushLineWidth;

}
@property(nonatomic, readwrite) BOOL isRubber;
@property(nonatomic, readwrite) CGFloat  kBrushLineWidth;
- (void)clear;
- (void)save;
//- (void)changRGBColorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue;
- (void)setBrushColorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue;
@end


Painting.m
#import "Painting.h"
#import <QuartzCore/QuartzCore.h>

@implementation Painting
@synthesize isRubber;
@synthesize kBrushLineWidth;

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
	   
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
	drawImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:kPaintViewBackGroudImg]];
	drawImage.frame = self.frame;
	[self addSubview:backGroudImage];
	[self addSubview:drawImage];
	mouseMoved = 0;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	mouseSwiped = NO;
	UITouch *touch = [touches anyObject];
	
	//双击清空
	//if ([touch tapCount] == 2) {
	//	[self clear];
	//}
	lastPoint = [touch locationInView:self];
	//lastPoint.y -= 20;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
	mouseSwiped = YES;
	UITouch *touch = [touches anyObject];        
	CGPoint currentPoint = [touch locationInView:self];
	//currentPoint.y -= 20; // only for 'kCGLineCapRound'
	UIGraphicsBeginImageContext(self.frame.size);
	//Albert Renshaw - Apps4Life
	[drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)];

	CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound
	CGContextSetLineWidth(UIGraphicsGetCurrentContext(), kBrushLineWidth); // for size 线条宽度
	CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), kBrushRGBColorRed, kBrushRGBColorGreen, kBrushRGBColorBlue, kBrushLineAlpha); //values for R, G, B, and Alpha
	

	//CGContextSetLineJoin(UIGraphicsGetCurrentContext() , kCGLineJoinRound );
	if (isRubber) {
		CGContextSetLineWidth(UIGraphicsGetCurrentContext(), kRubberWidth); // for size 线条宽度
		CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeClear);//混合模式
//		CGContextClearRect(UIGraphicsGetCurrentContext(),CGRectMake(currentPoint.x - kRubberWidth/2, currentPoint.y - kRubberWidth/2,kRubberWidth,kRubberWidth));
	}
//	else {
//		CGContextBeginPath(UIGraphicsGetCurrentContext());
//		CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
//		CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
//	}
	CGContextBeginPath(UIGraphicsGetCurrentContext());
	CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
	CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
	

	CGContextStrokePath(UIGraphicsGetCurrentContext());
	drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
	
	lastPoint = currentPoint;
	mouseMoved++;
	
	if (mouseMoved == 10) {
		mouseMoved = 0;
	}
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
	//UITouch *touch = [touches anyObject];
	//双击清空
	//if ([touch tapCount] == 2) {
	//	[self clear];
	//}
	if(!mouseSwiped) {
		
		UIGraphicsBeginImageContext(self.frame.size);
		[drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)];
		CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound
		CGContextSetLineWidth(UIGraphicsGetCurrentContext(), kBrushLineWidth); 
		CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), kBrushRGBColorRed, kBrushRGBColorGreen, kBrushRGBColorBlue, kBrushLineAlpha);
		//CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
		if (isRubber) {
			CGContextClearRect(UIGraphicsGetCurrentContext(),CGRectMake(lastPoint.x - kRubberWidth/2, lastPoint.y - kRubberWidth/2,kRubberWidth,kRubberWidth));
		}else {
			CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
			CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
		}
		
		CGContextStrokePath(UIGraphicsGetCurrentContext());
		CGContextFlush(UIGraphicsGetCurrentContext());
		drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
		UIGraphicsEndImageContext();
	}
}



- (void) clear{
    [drawImage setImage:[UIImage imageNamed:kPaintViewBackGroudImg]];
}

- (void)save{
	UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
	//UIImage *viewImage = [UIImage imageNamed:@"pink2.png"]; 
	UIGraphicsEndImageContext();
	if (viewImage != nil) {
		
		UIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil);
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"保存完毕"
														message:@"保存到图片浏览目录中" 
													   delegate:nil
											  cancelButtonTitle:@"关闭"
											  otherButtonTitles:nil];
		[alert show];
		[alert release];
	}
	
}

- (void)setBrushColorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue
{
	kBrushRGBColorRed = red;
	kBrushRGBColorGreen = green;
	kBrushRGBColorBlue = blue;
}

- (void)dealloc {
    [super dealloc];
}
@end



分享到:
评论

相关推荐

    几何画板使用手册

    《几何画板使用手册》是一本详尽指导用户掌握几何画板操作的教程。几何画板是一款强大的数学绘图工具,被广泛应用于教学、研究以及个人学习中。它以其直观的图形操作和动态演示功能,使得复杂的几何概念变得易于理解...

    3D几何画板使用教程.pdf

    根据所提供的文件内容,以下是详细的3D几何画板使用教程的知识点: 1. 几何画板软件及自定义工具介绍 几何画板是一个能够解决平面几何和解析几何问题的数学平台。然而,它在处理立体几何问题时会显得力不从心。为了...

    3D几何画板使用教程

    《3D几何画板使用教程》是一篇详细指导如何运用3D几何画板进行立体几何学习和教学的文章。3D几何画板是一个专门用于解决平面和立体几何问题的数学工具,尤其适合处理高中立体几何的教学需求。这个工具的独特之处在于...

    易语言源码画板使用.rar

    "易语言源码画板使用"的标题和描述表明,这个压缩包包含的是使用易语言编写的画板应用程序的源代码。通过学习和分析这些源码,我们可以深入了解易语言在图形用户界面(GUI)开发中的应用,特别是如何创建和控制画板...

    易语言源码画板使用.7z

    "易语言源码画板使用.7z" 是一个压缩包文件,其中包含的源码可能是关于如何在易语言中创建和使用画板组件的示例或教程。 画板在编程中通常指的是一个可以进行图形绘制的区域,用户可以在该区域内通过程序控制进行画...

    易语言画板使用

    在"易语言画板使用"这个主题中,我们将深入探讨如何利用易语言来创建一个画板应用,以及其中涉及到的核心技术。 首先,我们要明白“画板”通常是指一种用户界面组件,允许用户通过鼠标或触摸设备进行绘图。在易语言...

    几何画板使用教程

    几何画板使用教程,本教程教你如何使用几何画板,是几何画板的使用基础教程。 几何画板(—数理实验与辅助设计),几何画板是一个优秀的教育软件。

    [世恒帮您学易]-画板使用

    《易语言画板使用详解——基于世恒帮您学易》 在计算机编程的世界里,易语言是一款以中文为编程语言的开发工具,它旨在降低编程的门槛,让更多的人能够参与到程序设计中来。易语言的核心支持库包含了丰富的功能模块...

    几何画板使用教程.doc

    几何画板使用教程 几何画板是一个适用于几何(平面几何、解析几何、射影几何等)教学的软件平台。它为老师和学生提供了一个观察和探索几何图形内在关系的环境。它以点、线、圆为基本元素,通过对这些基本元素的变换...

    易语言 画板使用纯代码例子

    易语言 画板使用例子:画笔画画 画圆 画矩形 三角形等 适合新手

    几何画板基础级课件gsp模版170例

    《几何画板基础级课件GSP模版170例》是一份全面介绍几何画板使用技巧的资源集合,适合初学者和教师们参考学习。几何画板是一款强大的数学绘图工具,它能帮助用户动态地创建、探索和演示各种几何图形,尤其在数学教学...

    几何画板自定义工具包-800多个小工具

    几何画板是一款强大的动态几何软件,它允许用户创建...总之,“几何画板自定义工具包-800多个小工具”是提升几何画板使用体验的重要资源,无论你是教师还是学生,都可以从中受益,让几何学习和教学变得更加简单和有趣。

    易语言画板使用方法图解

    以下是关于易语言画板使用方法的详细说明: 1. 创建新工程: 在使用易语言画板前,首先需要创建一个新的工程。打开易语言主程序,你会看到“新建工程文件”对话框。在这里,选择“Windows窗口程序”选项,点击...

    js 使用canvas制作一个简易的画板.pdf

    使用 HTML5 Canvas 制作简易画板 使用 HTML5 Canvas 可以制作简易的画板,该画板具有基本的绘图功能,如选择线宽、颜色、清空画布等。本文将详细介绍如何使用 JavaScript 和 HTML5 Canvas 制作简易画板。 ...

    完整的安卓画板源代码 Android小画板

    在图形绘制方面,Android小画板使用了Canvas和Paint对象。Canvas是画布,用于绘制图形,而Paint则包含了绘制时的颜色、样式等属性。每次用户触摸屏幕时,都会在Canvas上添加一条路径(Path),并用Paint设置好的属性...

    几何画板3套中文使用手册

    几何画板3套中文使用手册,一共3套pdf格式的手册,一看就会,很好的。

Global site tag (gtag.js) - Google Analytics