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

时间: 2024-10-19 14:40:20

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

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

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

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篇—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默认的背景颜色就是黑色的,因为上下文默认的颜