DesignModeler : 设计模式  
  GestureRecginzer:手势识别
作者:韩俊强
1、第一种设计模式
DelegateViewController.m
-
(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];}
#pragma
mark --Target....action 设计模式的方法实现
//改变自身颜色
-
(void)changeselfBackground
: (ActionView *)view{
   
view.backgroundColor = [UIColor randomClolor]; 
}
ActionView.h 
@interface ActionView : UIView
//给外界提供一个接口(方法),用来给ActionView
制定事件的响应对象(目标 target),以及target目标响应的方法

- (void)addTarget : (id)target action:(SEL)action;
@end
ActionView.m
@interface ActionView ()

{

   
id _target;//存储传入的响应对象

   
SEL _action;//存储响应对象执行的方法

}
@end

@implementation ActionView
 ActionView
是自定义的视图,我们想把它封装成完成的类,一个完整的类,就是无论你再有什么样的需求,都无需去修改它的源文件

 以前的处理方式不够灵活,因为ActionView创建的对象没接到触摸消息,都要自己去处理事件,所以每创建一个对象,提出一个新的需求都要区修改它的源文件,此时ActionView对象和事件就捆绑到一起了,此时耦合性太强
 通过target
...action设计模式,将事件交由其他对象处理,让我们的ActionView像UIButton一样灵活,此时它只需负责通过目标干活就可以了,此时的ActionView对象和事件就不再捆绑到一起了,耦合性降低了,内聚就升高了
-
(void)addTarget : (id)target action:(SEL)action{

   
//此时在这个方法中要把外界传进来的目标对象,和目标对象要执行的方法存储起来

_target
= target;

   
_action
= action;

}

- (void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event{

//开始触摸,当ActionView
对象接受到触摸事件的时候,自己不处理事件,需要由_target
来处理
 //目标选择方法去为self执行事件,而且方法中如果有参数,参数就指的是addTarget
...action 方法的调用
   
[_target
performSelector:_action withObject:self];



}===================================================
2、第二种模式: 使用代理和设计模式,完成touchView的触摸事件的响应操作,其实就是通过这种方式解除
事件和touchView的耦合
 使用代理和协议步骤:

 1.制订协议(代理要完成的任务)

 2.定义代理属性(存储代理对象)

 3.在其他文件中指定touchView的代理对象 (帮touchView干活)

 4.让代理对象服从协议(代理对象答应帮touchView)干活

 5.让代理对象实现协议中的方法(代理对象知道怎么去干活)
 6.委托人通知代理对象什么时候执行协议中的方法(通知代理去干活)
TouchView.h
//第一步:制定协议

@class
TouchView;
@protocol TouchViewDelegate
<</span>NSObject>
@optional
//刚开始触摸的时候让代理对象完成这个方法
-
(void)touchBeganWithTouchView
: (TouchView *)touchView;
@end
@interface TouchView
: UIView
//第二步:第一代理属性
@end
————————————————————————————
TouchView.m

@implementation TouchView

- (void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event{

   
//第六步:让代理对象干活

if ([_delegate respondsToSelector:@selector(touchBeganWithTouchView:)])
{

       
[_delegate
touchBeganWithTouchView:self];}}
 ————————————————————————————
 
DelegateViewController.m 
//第四步:让代理对象遵循协议
@interface DelegateViewController
()<</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];//随机颜色自己做一下封装
}
======================================================================
3、GestureRecginzer:手势识别
AppDelegate.m
GestureViewController

*gesture = [[GestureViewControlleralloc]init];

self.window.rootViewController
=
gesture;

   
[gesture release];
——————————————————————
封装颜色随机值文件下载:http://pan.baidu.com/s/1gdm6JEb
GestureViewController.m
#import
"GestureViewController.h"
#import "UIColor+RandomColor.h"
- (void)viewDidLoad
{
   
[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];
————————————————————————————
1、轻拍手势

   
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer
alloc]initWithTarget:self action:@selector(handleTap :)];

   
//配置属性

   
//设置轻拍手势触发时间所需的轻拍次数

   
tapGesture.numberOfTapsRequired = 1;//默认为1下

   
//设置轻拍需要的手指对象个数
   
tapGesture.numberOfTouchesRequired = 2;
   
//给redView添加轻拍的手势对象

    [redView
addGestureRecognizer:tapGesture];
   
[tapGesture release];



#pragma mark 轻拍手势的方法实现
-
(void)handleTap
: (UITapGestureRecognizer *)tapGesture{
    
tapGesture.view.backgroundColor = [UIColor
randomClolor];}
————————————————————————————————————————
2、长按手势UILongPressGestureRecognizer
 
    UILongPressGestureRecognizer
*longGesture = [[UILongPressGestureRecognizer
alloc]initWithTarget:self action:@selector(handleLongPress
:)];
   
//设置长按手势最小多长时间触发方法
   
longGesture.minimumPressDuration = 1;//默认为.05秒
   
//在视图上添加手势对象

    [redView
addGestureRecognizer:longGesture];

   
//释放
   
[longGesture release];



#pragma mark
  长按手势方法实现
-
(void)
handleLongPress : (UILongPressGestureRecognizer
*)longPress{

//改变手势所在视图的父视图的颜色

//根据手势状态,选择执行相应操作

if
(longPress.state
==
UIGestureRecognizerStateBegan)
{

           
longPress.view.superview.backgroundColor
=
[UIColor
randomClolor];

}

}
————————————————————————
3、轻扫手势UISwipeGestureRecognizer
  
    UISwipeGestureRecognizer
*swipeGesture
= [[UISwipeGestureRecognizer
alloc]initWithTarget:self
action:@selector(handleSwipe:)];

//设置轻扫的方向

swipeGesture.direction

UISwipeGestureRecognizerDirectionRight;

[redView addGestureRecognizer:swipeGesture];

   
[swipeGesture release];



#pragma
mark  轻扫手势方法的实现
-
(void)handleSwipe:
(UISwipeGestureRecognizer
*)swipeGesture{

swipeGesture.view.backgroundColor
=
[UIColor
randomClolor];

}
————————————————————————-
4、平移手势UIPanGestureRecognizer
  
   
UIPanGestureRecognizer
*panGesture =
[[UIPanGestureRecognizer
alloc]initWithTarget:self
action:@selector(handlePan
: )];

   
[redView addGestureRecognizer:panGesture];
   
[panGesture release];



 #pragma
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];
————————————————————————————————
5、捏合手势
 UIPinchGestureRecognizer
 
   
UIPinchGestureRecognizer
*pinchGesture
= [[UIPinchGestureRecognizer
alloc]initWithTarget:self
action:@selector(handlePinch
:)];
   
[redView addGestureRecognizer:pinchGesture];
   
[pinchGesture release];
}



 #pragma mark 
捏合手势方法的实现
-
(void)handlePinch
: (UIPinchGestureRecognizer
*)pinchGesture{

pinchGesture.view.transform
=
CGAffineTransformScale(pinchGesture.view.transform,
pinchGesture.scale,
pinchGesture.scale);

//scale
缩放比例

   
//将之前的形变量置为1;

    pinchGesture.scale
=
1;

}
————————————————————————————————
6.旋转手势 UIRotationGestureRecognizer 
   
UIRotationGestureRecognizer
*rotationGesture
= [[UIRotationGestureRecognizer
alloc]initWithTarget:self
action:@selector(handleRotationGesture
: )];
   
[redView addGestureRecognizer:rotationGesture];
   
[rotationGesture release];



 #pragma mark 
旋转手势方法的实现
-
(void)handleRotationGesture
: (UIRotationGestureRecognizer
*)RotationResture{

RotationResture.view.transform
=
CGAffineTransformRotate(RotationResture.view.transform,
RotationResture.rotation);

//将之前的角度增量置为0

RotationResture.rotation
=
0;

}
——————————————————————————————
7.屏幕边缘手势UIScreenEdgePanGestureRecognizer 
   
//屏幕边缘的手势必须和硬件设备的边缘重合,此时这个手势才有作用

UIScreenEdgePanGestureRecognizer
*screenGesture
= [[UIScreenEdgePanGestureRecognizer
alloc]initWithTarget:self
action:@selector(handleScreenGesture:
)];

   
//设置屏幕的边缘
   
screenGesture.edges
=
UIRectEdgeLeft;

[redView addGestureRecognizer:screenGesture];

   
[screenGesture release];

 #pragma
mark  屏幕边缘手势方法的实现
-
(void)
handleScreenGesture : (UIScreenEdgePanGestureRecognizer
*)screen{

NSLog(@"小样你能行吗?");

   
}
=================================================
欢迎学习本文,未经博主允许,禁止转载!

DesignModeler&nbsp;GestureRecgin…的更多相关文章

  1. 高阶篇:5)仿真研究Simulation studies

    本章目的:了解仿真,初步学会怎么应用仿真.   1.仿真的定义 仿真------就是用模型(物理模型或数学模型)代替实际系统进行实验和研究. 把实际系统建立成物理模型或数学模型进行研究,然后把对模型实 ...

  2. Fluent算例精选|03利用VOF和蒸发-冷凝模型

    通过学习本算例您将获得? 1.学会基本的VOF模型设置流程 2.学会利用蒸发-冷凝模型来模拟传热沸腾 目录 1摘要4 2传热沸腾模型介绍4 3前处理4 4求解设置5 4.1启动Fluent5 4.2网 ...

随机推荐

  1. 使用gogs搭建git私有仓库

    搭建gogs 我的机器环境:centos 7 1.安装git yum install git   2.安装mysql gogs的数据存在mysql中,需要安装一个mysql来存数据,当然也有其他的选择 ...

  2. 安卓7.1 新特性Shortcut

    介绍 Shortcut 是谷歌在API25提出来的 类似苹果3D touch 但是没有压力感应.在安卓中完全就是长按. 来看下效果吧: 是不是很赞? 那么请随本文一起学习吧 更新 新建项目 在你项目下 ...

  3. 安卓高级6 SnackBar

    引言 文/李牧羊(简书作者) 原文链接:http://www.jianshu.com/p/2654e6bda3b1 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者". ...

  4. Java中常用缓存Cache机制的实现

    缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件 ...

  5. 监听RecyclerView滑动到末端

    监听RecyclerView滑动到末端 效果图 实现 1. 添加滑动到末端的接口 package com.kongqw.recyclerviewdemo; /** * Created by kongq ...

  6. Appium移动自动化测试(五)--app控件获取之uiautomatorviewer

    初探 在Android的SDk提供了以下的工具来支持我们进行UI自动化测试: uiautomatorviewer:用来扫描和分析Android应用程序的UI控件的工具. uiautomator:一个包 ...

  7. SpriteKit游戏开发 Challenge 2: An invincible zombie 问题的另一种解决方法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 该挑战的目的是僵尸碰到敌人时,将其设置为无敌模式,具体要求如下 ...

  8. PGM:无向图模型:马尔可夫网

    http://blog.csdn.net/pipisorry/article/details/52489321 马尔可夫网 马尔可夫网在计算机视觉领域通常称为马尔可夫随机场(Markov random ...

  9. Android监听屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听解锁事 ...

  10. Linux命令—文件目录

     (1) shell的使用 <1>检查系统当前运行的shell版本: [root@lab root]# echo $SHELL <2>从当前shell下切换到csh: [r ...