DesignModeler GestureRecgin…
GestureRecginzer:手势识别
(void)viewDidLoad {
[super
viewDidLoad];
//改变自身颜色
ActionView
*redView =
[[ActionView alloc]initWithFrame:CGRectMake(20, 20, 280, 100)];
redView.tag = 101;
[ redView addTarget:self action:@selector(changeselfBackground :)];
redView.backgroundColor = [UIColor randomClolor];
[self.view addSubview:redView];
[redView release];}
mark --Target....action 设计模式的方法实现
//改变自身颜色
(void)changeselfBackground
: (ActionView *)view{
view.backgroundColor = [UIColor randomClolor];
//给外界提供一个接口(方法),用来给ActionView
制定事件的响应对象(目标 target),以及target目标响应的方法
- (void)addTarget : (id)target action:(SEL)action;
{
id _target;//存储传入的响应对象
SEL _action;//存储响应对象执行的方法
}
@end
是自定义的视图,我们想把它封装成完成的类,一个完整的类,就是无论你再有什么样的需求,都无需去修改它的源文件
以前的处理方式不够灵活,因为ActionView创建的对象没接到触摸消息,都要自己去处理事件,所以每创建一个对象,提出一个新的需求都要区修改它的源文件,此时ActionView对象和事件就捆绑到一起了,此时耦合性太强
...action设计模式,将事件交由其他对象处理,让我们的ActionView像UIButton一样灵活,此时它只需负责通过目标干活就可以了,此时的ActionView对象和事件就不再捆绑到一起了,耦合性降低了,内聚就升高了
(void)addTarget : (id)target action:(SEL)action{
//此时在这个方法中要把外界传进来的目标对象,和目标对象要执行的方法存储起来
_target
= target;
_action
= action;
}
- (void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event{
对象接受到触摸事件的时候,自己不处理事件,需要由_target
来处理
...action 方法的调用
[_target
performSelector:_action withObject:self];

事件和touchView的耦合
1.制订协议(代理要完成的任务)
2.定义代理属性(存储代理对象)
3.在其他文件中指定touchView的代理对象 (帮touchView干活)
4.让代理对象服从协议(代理对象答应帮touchView)干活
5.让代理对象实现协议中的方法(代理对象知道怎么去干活)
@class
TouchView;
@protocol TouchViewDelegate
<</span>NSObject>
@optional
//刚开始触摸的时候让代理对象完成这个方法
(void)touchBeganWithTouchView
: (TouchView *)touchView;
: UIView
//第二步:第一代理属性
- (void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event{
//第六步:让代理对象干活
if ([_delegate respondsToSelector:@selector(touchBeganWithTouchView:)])
{
[_delegate
touchBeganWithTouchView:self];}}
()<</span>TouchViewDelegate>
@end
@implementation DelegateViewController
- (void)viewDidLoad {
[super
viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
TouchView
*redView =
[[TouchView alloc]initWithFrame:CGRectMake(20, 30, 280, 100)];
redView.backgroundColor = [UIColor redColor];
//第三步:指定代理对象
redView.delegate = self;
[self.view addSubview:redView];
[redView release];
}
//第五步:实现协议中的方法
(void)touchBeganWithTouchView:(TouchView
*)touchView{
touchView.backgroundColor = [UIColor randomClolor];//随机颜色自己做一下封装

*gesture = [[GestureViewControlleralloc]init];
self.window.rootViewController
=
gesture;
[gesture release];
"GestureViewController.h"
{
[super
viewDidLoad];
self.view.backgroundColor
= [UIColor
colorWithPatternImage:[UIImage
imageNamed:@"444.jpg"]];
// UIGestureRecognizer 手势识别器的基类
,拓为我们提供了手势识别器的一些基本的功能,我们在屏幕上的手势全部由手势识别器来完成识别,此时我们只需要关心手势识别之后应该做出什么处理
,它由6大子类,还有一个孙子类(屏幕边缘手势,是平移手势的子类)
UIView
*redView = [[UIView
alloc]initWithFrame:CGRectMake(0,
20,
320,
500)];
redView.backgroundColor
= [UIColor
redColor];
[self.view
addSubview:redView];
[redView release];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer
alloc]initWithTarget:self action:@selector(handleTap :)];
//配置属性
//设置轻拍手势触发时间所需的轻拍次数
tapGesture.numberOfTapsRequired = 1;//默认为1下
//设置轻拍需要的手指对象个数
tapGesture.numberOfTouchesRequired = 2;
//给redView添加轻拍的手势对象
[redView
addGestureRecognizer:tapGesture];
[tapGesture release];

(void)handleTap
: (UITapGestureRecognizer *)tapGesture{
tapGesture.view.backgroundColor = [UIColor
randomClolor];}
*longGesture = [[UILongPressGestureRecognizer
alloc]initWithTarget:self action:@selector(handleLongPress
:)];
//设置长按手势最小多长时间触发方法
longGesture.minimumPressDuration = 1;//默认为.05秒
//在视图上添加手势对象
[redView
addGestureRecognizer:longGesture];
//释放
[longGesture release];

长按手势方法实现
-
(void)
handleLongPress : (UILongPressGestureRecognizer
*)longPress{
//改变手势所在视图的父视图的颜色
//根据手势状态,选择执行相应操作
if
(longPress.state
==
UIGestureRecognizerStateBegan)
{
longPress.view.superview.backgroundColor
=
[UIColor
randomClolor];
}
*swipeGesture
= [[UISwipeGestureRecognizer
alloc]initWithTarget:self
action:@selector(handleSwipe:)];
//设置轻扫的方向
swipeGesture.direction
=
UISwipeGestureRecognizerDirectionRight;
[redView addGestureRecognizer:swipeGesture];
[swipeGesture release];

mark 轻扫手势方法的实现
-
(void)handleSwipe:
(UISwipeGestureRecognizer
*)swipeGesture{
swipeGesture.view.backgroundColor
=
[UIColor
randomClolor];
UIPanGestureRecognizer
*panGesture =
[[UIPanGestureRecognizer
alloc]initWithTarget:self
action:@selector(handlePan
: )];
[redView addGestureRecognizer:panGesture];
[panGesture release];

mark 平移手势方法的实现
-
(void)handlePan
: (UIPanGestureRecognizer
*)panGesture{
//1.获取平移增量
CGPoint
point =
[panGesture translationInView:panGesture.view];
//2.仿射变换(变形)
//第一个参数:变形之前的视图位置和大小
//第二个参数:x轴上的形变量(x轴上的增量)
//第三个参数:y轴上的形变量(y轴上的增量)
panGesture.view.transform
=
CGAffineTransformTranslate(panGesture.view.transform,point.x,
point.y);
//3.将之前的增量清0;
//CGPointZero
代表{0,0}点
CGPointMake(0,0);
[panGesture setTranslation:CGPointZero
inView:panGesture.view];
UIPinchGestureRecognizer
UIPinchGestureRecognizer
*pinchGesture
= [[UIPinchGestureRecognizer
alloc]initWithTarget:self
action:@selector(handlePinch
:)];
[redView addGestureRecognizer:pinchGesture];
[pinchGesture release];

捏合手势方法的实现
-
(void)handlePinch
: (UIPinchGestureRecognizer
*)pinchGesture{
pinchGesture.view.transform
=
CGAffineTransformScale(pinchGesture.view.transform,
pinchGesture.scale,
pinchGesture.scale);
//scale
缩放比例
//将之前的形变量置为1;
pinchGesture.scale
=
1;
UIRotationGestureRecognizer
*rotationGesture
= [[UIRotationGestureRecognizer
alloc]initWithTarget:self
action:@selector(handleRotationGesture
: )];
[redView addGestureRecognizer:rotationGesture];
[rotationGesture release];

旋转手势方法的实现
-
(void)handleRotationGesture
: (UIRotationGestureRecognizer
*)RotationResture{
RotationResture.view.transform
=
CGAffineTransformRotate(RotationResture.view.transform,
RotationResture.rotation);
//将之前的角度增量置为0
RotationResture.rotation
=
0;
//屏幕边缘的手势必须和硬件设备的边缘重合,此时这个手势才有作用
UIScreenEdgePanGestureRecognizer
*screenGesture
= [[UIScreenEdgePanGestureRecognizer
alloc]initWithTarget:self
action:@selector(handleScreenGesture:
)];
//设置屏幕的边缘
screenGesture.edges
=
UIRectEdgeLeft;
[redView addGestureRecognizer:screenGesture];
[screenGesture release];

mark 屏幕边缘手势方法的实现
-
(void)
handleScreenGesture : (UIScreenEdgePanGestureRecognizer
*)screen{
NSLog(@"小样你能行吗?");
}
DesignModeler GestureRecgin…的更多相关文章
- 高阶篇:5)仿真研究Simulation studies
本章目的:了解仿真,初步学会怎么应用仿真. 1.仿真的定义 仿真------就是用模型(物理模型或数学模型)代替实际系统进行实验和研究. 把实际系统建立成物理模型或数学模型进行研究,然后把对模型实 ...
- Fluent算例精选|03利用VOF和蒸发-冷凝模型
通过学习本算例您将获得? 1.学会基本的VOF模型设置流程 2.学会利用蒸发-冷凝模型来模拟传热沸腾 目录 1摘要4 2传热沸腾模型介绍4 3前处理4 4求解设置5 4.1启动Fluent5 4.2网 ...
随机推荐
- c++指针函数的使用——回调函数
/* 函数指针 函数也是有地址的 所谓函数指针,就是指向函数的指针,函数指针也是一个变量,可以指向不同的函数.同时通过函数指针可以调用其指向函数,从而使函数的调用更加灵活. 函数指针的用途 */ #i ...
- 使用redis做缓存
redis常本用来作为缓存服务器.缓存的好处是减少服务器的压力,数据查询速度快.解决数据响应慢的问题. 添加缓存:只用redis的Hash数据类型添加缓存. 例如:需要在查询的业务功能中,添加缓存 1 ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令
ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利. 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的 ...
- [总结] fhq_Treap 学习笔记
无旋版 $Treap$. 只需要两个操作即可达到 $splay$ 的所有功能 1.$split$ 它的主要思想就是把一个 $Treap$ 分成两个. $split$ 操作有两种类型,一种是按照权值分配 ...
- AbstractQueuedSynchronizer源码解读
1. 背景 AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量.事件等) ...
- Quartz学习笔记1:Quartz概述
Quartz是开源任务调度框架中的翘楚,它提供了强大的 任务调度机制.Quartz允许开发人员灵活的定义触发器的调度时间表,并可对触发器和任务进行关联映射.此外,Quartz提供了调度运行环境的持久化 ...
- FORM实现中打开图片,链接,文档(参考自itpub上一篇帖子,整理而来)
FORM实现中打开图片,链接,文档 参考自itpub上一篇帖子,整理而来 1.添加PL程序库D2kwutil.pll 2.主要实现程序 /*过程参数说明: v_application --打开文件的应 ...
- 阻塞IO服务器模型之单线程服务器模型
单线程服务器模型是最简单的一个服务器模型,几乎我们所有程序员在刚开始接触网络编程(不管是B/S结构还是C/S结构)都是从这个简单的模型开始.这种模型只提供同时一个客户端访问,多个客户端访问必须要等到前 ...
- MAMP显示文件列表
背景 MAMP是Mac下的一个PHP+Nginx+MySQL的集成环境,支持多站点,不同版本PHP. 今天有人请教MAMP如何显示文件列表的问题,这里记录一下. 知识补充 一个网站为了安全考虑,默认是 ...
- Python Skelve 库
在Python中有一个简单的轻量级的类似于Key-value的存储型数据库,那就是Skelve.下面就来一起看一看这个库的简单的使用吧. 小例子 我本人比较喜欢从例子出发,然后再来研究这些内部的行为. ...