iOS开发UI篇—事件处理(完成一个简单的涂鸦板)

iOS开发UI篇—事件处理(实现一个简单的涂鸦板)

一、说明

该程序使用事件处理机制和绘图完成了一个简单的涂鸦板应用,使用鼠标在涂鸦板内拖动即可进行涂鸦,点击保存到相册按钮,可以把完成的涂鸦保存到手机的相册中,点击回退按钮可以向后退回一步,点击清空可以让涂鸦板清空。

文件结构和界面搭建:

二、代码示例

YYViewController.m文件


 1 //
2 // YYViewController.m
3 // 02-画板程序
4 //
5 // Created by apple on 14-6-12.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYViewController.h"
10 #import "YYView.h"
11 #import "UIImage+YYcaptureView.h"
12 #import "MBProgressHUD+NJ.h"
13
14 @interface YYViewController ()
15 - (IBAction)clearOnClick:(UIButton *)sender;
16 @property (weak, nonatomic) IBOutlet YYView *customView;
17 - (IBAction)backOnClick:(UIButton *)sender;
18 - (IBAction)saveBtnOnClick:(UIButton *)sender;
19
20
21 @end
22
23 @implementation YYViewController
24
25 - (void)viewDidLoad
26 {
27 [super viewDidLoad];
28 }
29
30
31 - (IBAction)clearOnClick:(UIButton *)sender {
32 //调用清理方法
33 [self.customView clearView];
34 }
35
36 - (IBAction)backOnClick:(UIButton *)sender {
37 //调用回退方法
38 [self.customView backView];
39 }
40
41 - (IBAction)saveBtnOnClick:(UIButton *)sender {
42 //调用分类中的方法,获取图片
43 UIImage *newImage = [UIImage YYcaptureImageWithView:self.customView];
44 //将图片保存到手机的相册中去
45 UIImageWriteToSavedPhotosAlbum(newImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
46 }
47
48 //处理图片的保存事件
49 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
50 {
51 //使用第三方框架,提供消息提示
52 if (error) {
53 [MBProgressHUD showError:@"涂鸦保存失败,请检查权限"];
54 }else
55 {
56 [MBProgressHUD showSuccess:@"保存成功!"];
57 }
58
59 }
60 @end

YYView.h文件


 1 //
2 // YYView.h
3 // 02-画板程序
4 //
5 // Created by apple on 14-6-12.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import <UIKit/UIKit.h>
10
11 @interface YYView : UIView
12
13 -(void)clearView;
14 -(void)backView;
15 @end

YYView.m文件


  1 //
2 // YYView.m
3 // 02-画板程序
4 //
5 // Created by apple on 14-6-12.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "YYView.h"
10
11 //私有扩展
12 @interface YYView ()
13 /**
14 * 用来存储所有的路径信息
15 */
16 @property(nonatomic,strong)NSMutableArray *paths;
17 @end
18 @implementation YYView
19
20 #pragma mark-懒加载
21 -(NSMutableArray *)paths
22 {
23 if (_paths==nil) {
24 _paths=[NSMutableArray array];
25 }
26 return _paths;
27 }
28
29 //开始手指触摸事件
30 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
31 {
32 //1.获取手指对应的UItoch对象
33 UITouch *touch=[touches anyObject];
34
35 //2.通过UIToch对象获取手指触摸的位置
36 CGPoint starPoint=[touch locationInView:touch.view];
37
38 //3.当用户手指按下的时候创建一条路径
39 UIBezierPath *path=[UIBezierPath bezierPath];
40
41 //设置路径的相关属性
42 [path setLineWidth:5];
43 [path setLineJoinStyle:kCGLineJoinRound];
44 [path setLineCapStyle:kCGLineCapRound];
45
46 //4.设置当前路径的起点
47 [path moveToPoint:starPoint];
48
49 //5.将路径添加到数组中去
50 [self.paths addObject:path];
51 }
52
53 //手指移动事件
54 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
55 {
56 //1.获取手指对应的UIToch对象
57 UITouch *touch=[touches anyObject];
58 //2.通过UIToch对象获取手指触摸的位置
59 CGPoint movePoint=[touch locationInView:touch.view];
60 //3.取出当前的path
61 UIBezierPath *currentPath=[self.paths lastObject];
62 //4.设置当前路径的终点
63 [currentPath addLineToPoint:movePoint];
64
65 //5.调用drawRect方法重绘视图
66 [self setNeedsDisplay];
67 }
68
69 ////抬起手指
70 //-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
71 //{
72 // [self touchesMoved:touches withEvent:event];
73 //}
74
75 //画线
76 - (void)drawRect:(CGRect)rect
77 {
78 //根据路径绘制所有的线段
79 for (UIBezierPath *path in self.paths) {
80 [path stroke];
81 }
82 }
83
84 /**
85 * 清空面板
86 */
87 -(void)clearView
88 {
89 //清空所有的路径
90 [self.paths removeAllObjects];
91 //调用方法重新绘图
92 [self setNeedsDisplay];
93 }
94
95 /**
96 * 回退操作
97 */
98 -(void)backView
99 {
100 //移除路径数组中的最后一个元素(最后一条路径)
101 [self.paths removeLastObject];
102 //重新绘图
103 [self setNeedsDisplay];
104 }
105 @end

提供一个对功能进行封装的分类。

UIImage+YYcaptureView.h文件


 1 //
2 // UIImage+YYcaptureView.h
3 // 02-画板程序
4 //
5 // Created by apple on 14-6-12.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import <UIKit/UIKit.h>
10
11 @interface UIImage (YYcaptureView)
12
13 /**
14 * 该分类提供一个方法,接收一个view的参数,返回一个view的视图
15 */
16 +(UIImage *)YYcaptureImageWithView:(UIView *)view;
17 @end

UIImage+YYcaptureView.m文件


 1 //
2 // UIImage+YYcaptureView.m
3 // 02-画板程序
4 //
5 // Created by apple on 14-6-12.
6 // Copyright (c) 2014年 itcase. All rights reserved.
7 //
8
9 #import "UIImage+YYcaptureView.h"
10
11 @implementation UIImage (YYcaptureView)
12
13 +(UIImage *)YYcaptureImageWithView:(UIView *)view
14 {
15 //1.创建bitmap图形上下文
16 UIGraphicsBeginImageContext(view.frame.size);
17 //2.将要保存的view的layer绘制到bitmap图形上下文中
18 [view.layer renderInContext:UIGraphicsGetCurrentContext()];
19 //3.取出绘制好的图片
20 UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
21 //4.返回获取的图片
22 return newImage;
23 }
24 @end

三、实现效果

                

iOS开发UI篇—事件处理(完成一个简单的涂鸦板),布布扣,bubuko.com

时间: 2024-10-10 16:28:20

iOS开发UI篇—事件处理(完成一个简单的涂鸦板)的相关文章

iOS开发UI篇—事件处理简单介绍1

iOS开发UI篇—事件处理简单介绍 一.事件处理简单介绍 说明:ios中的事件 在用户使用app过程中,会产生各种各样的事件 ,iOS中的事件可以分为3大类型 : 1.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 2.UIResponder UIResponde

iOS开发UI篇—UIPickerView控件简单介绍

iOS开发UI篇—UIPickerView控件简单介绍 一.UIPickerView 控件 1.简单介绍: 2.示例代码 TXViewController.m文件 1 // Created by 鑫 on 14-10-15. 2 3 // Copyright (c) 2014年 梁镋鑫. All rights reserved. 4 5 // 6 7 8 9 #import "TXViewController.h" 10 11 12 13 @interface TXViewContro

iOS开发UI篇—事件处理(实现一个简单的涂鸦板)

一.说明 该程序使用事件处理机制和绘图完成了一个简单的涂鸦板应用,使用鼠标在涂鸦板内拖动即可进行涂鸦,点击保存到相册按钮,可以把完成的涂鸦保存到手机的相册中,点击回退按钮可以向后退回一步,点击清空可以让涂鸦板清空. 文件结构和界面搭建: 二.代码示例 YYViewController.m文件 复制代码 1 // 2 //  YYViewController.m 3 //  02-画板程序 4 // 5 //  Created by apple on 14-6-12. 6 //  Copyrigh

iOS开发UI篇—UITableview控件简单介绍

一.基本介绍 在众多移动应?用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承自UIScrollView,因此支持垂直滚动,?且性能极佳 . UITableview有分组和不分组两种样式,可以在storyboard或者是用代码设置. 二.数据展示 UITableView需要?一个数据源(dataSource)来显示数据UITableView会向数据源查询一共有多少行数据以及每?行显示什么数据等 没有设置数据源

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcarsgroup.h // 07-汽车展示(高级) // // Created by apple on 14-5-28. // Copyright (c) 2014年 itcase. All rights reserved. // #import <Foundation/Foundation.h> @

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文件控件tag值操作 数据模型部分: YYtg.h文件 // // YYtg.h // 01-团购数据显示(没有配套的类) // // Created by apple on 14-5-29. // Copyright (c) 2014年 itcase. All rights reserved. //

iOS开发UI篇—实现一个简单的手势解锁应用(基本)

iOS开发UI篇—实现一个简单的手势解锁应用(基本) 一.实现效果 实现效果图: 二.手势解锁应用分析 1.监听手指在view上的移动,首先肯定需要自定义一个view,重写touch began,touch move等方法,当手指移动到圈上时,让其变亮.可以通过button按钮来实现. 2.界面搭建 背景图片(给控制器的view添加一个imageview,设置属性背景图片) 九个按钮(把九个按钮作为一个整体,使用一个大的view来管理这些小的view,这些小的view就是9个button.如果使

iOS开发UI篇—实现一个简单的手势解锁应用(完善)

iOS开发UI篇—实现一个简单的手势解锁应用(完善) 一.需要实现的效果 二.应用完善 1.绘制不处于按钮范围内的连线 2.解决bug(完善) bug1:如果在began方法中通知view绘图,那么会产生bug.因为,当前点没有清空,在手指移开之后要清空当前点.可以在绘制前进行判断,如果当前点是(0,0)那么就不划线.或者在began方法中不进行重绘. bug2:无限菊花.自定义view的背景色为默认的(黑色),只要重写了drawrect方法,view默认的背景颜色就是黑色的,因为上下文默认的颜