ios 中触摸事件
2015-11-23 22:49
537 查看
我们知道耦合是衡量模块和模块之间关联程度的指标,“高内聚, 低耦合”是面对对象编程的核心思想,为了在触摸事件中降低耦合度,我们一般采用两种方式,即target ……action设计模式和delegate设计模式
声明一个方法
- (void)addTarget: (id)target action:(SEL)action;
(实现类)
/*
ActionView 是一个自定义视图,相当于一个封装好的类,一个封装好的类,无论有什么新的需求,都不需要修改原有类的内部代码
现在的写法:不灵活 ActionView 接受到触摸之后,有自身去处理触摸事件,所以每当外界有新的变化,都要修改自身的内部代码。ActionView 和 响应的事件就绑定一起了(耦合性增加)
*/
通过target……action 设计模式,将事件处理交给外界其他对象来做,而ActionView自身就负责通知其他对象处理即可。降低程序的耦合性,提高了程序的内聚性。(高内聚,低耦合)
实现方法
- (void)addTarget: (id)target action:(SEL)action {
_target = target;//存储目标对象,提供给其他方法使用
_action = action;//存储目标行为
}
(这时要注意要在延展中声明属性 {
id _target;//存储指定的外界对象
SEL _action;//存储对应的action任务
}
第二步
重写接触时实现事件 注意:(一定要理解清这一步)
-(void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event {
//当ActionView接受到触摸事件时自身不处理,自身不处理,通知target来处理
//让target来执行action的行为
//self –ActionView视图对象
[_target performSelector:_action withObject:self];
}
//在视图控制器内去完成要求
设置一个视图并定义为控制器根视图
(例如 在触摸时改变自身颜色)
//触摸时改变自身颜色
//self –当前视图控制器的对象
[redview addTarget:self action:@selector(changeSelfColor:)];
//在视图控制器内去实现changeSelfColor:方法
在.h文件中
第一步制定协议 这个协议的属性用 @optional
- (void)touchBeganWithView: (TouchView *)view;//触摸时 对应touchBegan……
- (void)touchEndedWithView: (TouchView *)view;//触摸结束时
- (void)touchMovedVithView: (TouchView *)view;//触摸移动时 对应touchMoved……
- (void)touchCancelledWithView: (TouchView *)view;//触摸中断时,对应touchCancelled ……
第二步设置代理属性
@property (nonatomic, assign) iddelegate;
//第三步 在视图控制器中制定代理对象
Tv.delegate = self;
//第四步 代理对象所在的类服从协议
//第五步 代理对象所在的类实现协议中的方法
//第六步 (在.m 文件)通知代理对象去执行方法
例如: -(void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event {
//如果代理对象存在 且实现了对应方法
if (self.delegate && [self.delegate respondsToSelector:@selector(touchBeganWithView:)]) {
//代理对象执行对应方法
[_delegate touchBeganWithView:self];
}
}
target ……action设计模式
(声明类)声明一个方法
- (void)addTarget: (id)target action:(SEL)action;
(实现类)
/*
ActionView 是一个自定义视图,相当于一个封装好的类,一个封装好的类,无论有什么新的需求,都不需要修改原有类的内部代码
现在的写法:不灵活 ActionView 接受到触摸之后,有自身去处理触摸事件,所以每当外界有新的变化,都要修改自身的内部代码。ActionView 和 响应的事件就绑定一起了(耦合性增加)
*/
通过target……action 设计模式,将事件处理交给外界其他对象来做,而ActionView自身就负责通知其他对象处理即可。降低程序的耦合性,提高了程序的内聚性。(高内聚,低耦合)
实现方法
- (void)addTarget: (id)target action:(SEL)action {
_target = target;//存储目标对象,提供给其他方法使用
_action = action;//存储目标行为
}
(这时要注意要在延展中声明属性 {
id _target;//存储指定的外界对象
SEL _action;//存储对应的action任务
}
第二步
重写接触时实现事件 注意:(一定要理解清这一步)
-(void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event {
//当ActionView接受到触摸事件时自身不处理,自身不处理,通知target来处理
//让target来执行action的行为
//self –ActionView视图对象
[_target performSelector:_action withObject:self];
}
//在视图控制器内去完成要求
设置一个视图并定义为控制器根视图
(例如 在触摸时改变自身颜色)
//触摸时改变自身颜色
//self –当前视图控制器的对象
[redview addTarget:self action:@selector(changeSelfColor:)];
//在视图控制器内去实现changeSelfColor:方法
delegate设计模式
使用delegate 来进行解耦。让代理完成TouchView的触摸事件的响应在.h文件中
第一步制定协议 这个协议的属性用 @optional
- (void)touchBeganWithView: (TouchView *)view;//触摸时 对应touchBegan……
- (void)touchEndedWithView: (TouchView *)view;//触摸结束时
- (void)touchMovedVithView: (TouchView *)view;//触摸移动时 对应touchMoved……
- (void)touchCancelledWithView: (TouchView *)view;//触摸中断时,对应touchCancelled ……
第二步设置代理属性
@property (nonatomic, assign) iddelegate;
//第三步 在视图控制器中制定代理对象
Tv.delegate = self;
//第四步 代理对象所在的类服从协议
//第五步 代理对象所在的类实现协议中的方法
//第六步 (在.m 文件)通知代理对象去执行方法
例如: -(void)touchesBegan:(NSSet )touches withEvent:(UIEvent )event {
//如果代理对象存在 且实现了对应方法
if (self.delegate && [self.delegate respondsToSelector:@selector(touchBeganWithView:)]) {
//代理对象执行对应方法
[_delegate touchBeganWithView:self];
}
}
相关文章推荐
- 史上最全IOS的touch事件手势使用方法
- iOS开发实战tips--强化NSLog的输出
- ★iOS 性能测试工具 SDK
- 使用定位服务
- [转]iOS isa 浅析
- IOS的跑马灯之HelloWorld
- iOS 打开相册或相机
- iOS中的Quartz 2D
- iOS应用版本更新(自动提醒用户更新代码)
- iOS开发证书
- iOS史上最新,最全的笔试题,命中率90%
- IOS图层Layer学习笔记(一)—— 序
- ios:字符串与汉字的判断
- 在IOS下xcode使用github管理代码
- Xcode7自带的Instruments
- iOS 中的线程(2) --- GCD
- iOS---iOS开发零基础教程之AFNetWorking POST 队列请求
- IOS 证书设置指南
- iOS--同时请求的问题(用不到)
- iOS开发:获取文件路径总结