您的位置:首页 > 移动开发 > IOS开发

ios 中触摸事件

2015-11-23 22:49 537 查看
我们知道耦合是衡量模块和模块之间关联程度的指标,“高内聚, 低耦合”是面对对象编程的核心思想,为了在触摸事件中降低耦合度,我们一般采用两种方式,即target ……action设计模式和delegate设计模式

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];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: