DesignModeler GestureRecgin…

DesignModeler : 设计模式     GestureRecginzer:手势识别

作者:韩俊强

原创版权地址:http://blog.sina.com.cn/s/blog_814ecfa90102vvm5.html

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:[UIImageimageNamed:@"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:selfaction:@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:selfaction:@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:selfaction:@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 = [[UIRotationGestureRecognizeralloc]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 = [[UIScreenEdgePanGestureRecognizeralloc]initWithTarget:self action:@selector(handleScreenGesture: )];

    //设置屏幕的边缘

    screenGesture.edges = UIRectEdgeLeft;
    [redView addGestureRecognizer:screenGesture];

    [screenGesture release];

 #pragma mark  屏幕边缘手势方法的实现
- (void) handleScreenGesture : (UIScreenEdgePanGestureRecognizer *)screen{
    NSLog(@"小样你能行吗?");

    }

=================================================

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

时间: 2024-10-03 14:25:37

DesignModeler&nbsp;GestureRecgin…的相关文章

DesignModeler&amp;amp;nbsp;GestureRecgin…

DesignModeler : 设计模式     GestureRecginzer:手势识别 作者:韩俊强 原创版权地址:http://blog.sina.com.cn/s/blog_814ecfa90102vvm5.html 1.第一种设计模式 DelegateViewController.m - (void)viewDidLoad {     [super viewDidLoad];     //改变自身颜色     ActionView *redView = [[ActionView al

iOS学习目录

IOS开发学习索引目录:http://blog.sina.com.cn/s/blog_814ecfa90102vwlu.html ---------------每走一步------------------------- ---------------就是进步------------------------- ================整理UI总结:==================== 控件的基本使用 : http://blog.sina.com.cn/s/blog_814ecfa901

《ANSYS Workbench 14有限元分析自学手册》——第 1 章 ANSYS orkbench 14基础 1.1 ANSYS Workbench概述

第 1 章 ANSYS orkbench 14基础 1.1 ANSYS Workbench概述 ANSYS Workbench 14有限元分析自学手册 Workbench 是ANSYS公司开发的新一代协同仿真集成平台. 1997年,ANSYS公司基于广大设计的分析应用需求,开发了专供设计人员应用的分析软件ANSYS DesignSpace(DS),其前后处理功能与经典的ANSYS软件完全不同,软件的易用性和与CAD接口非常棒. 2000年,ANSYS DesignSpace的界面风格更加深受广大

《ANSYS Workbench有限元分析实例详解(静力学)》——第2章 ANSYS Workbench主界面设置2.1 窗口设置

第2章 ANSYS Workbench主界面设置 ANSYS早期版本以经典界面为主,Workbench虽已存在,但当时主要针对ANSYS经典界面建模困难而设置.经过9.0-11.0升级后,ANSYS经典界面逐渐稳定,Workbench也随之功能逐渐增强.当ANSYS升级为12.0版本时,Workbench界面发生了根本变化,具有独特的拖拉分析流程.相对完整的分析模块,并首次将经典界面置于其下.之后的ANSYS历次升级,均以Workbench为重点.现在ANSYS Workbench(简称WB)在

《ANSYS FLUENT 16.0超级学习手册》——2.4 FLUENT与ANSYS Workbench

2.4 FLUENT与ANSYS Workbench FLUENT 16.0被集成到ANSYS Workbench平台后,其使用方法有了一些新特点.为了让读者更好地在ANSYS Workbench平台中使用FLUENT,本节将简要介绍ANSYS Workbench及其与FLUENT之间的关系. 2.4.1 ANSYS Workbench简介 ANSYS Workbench提供了多种先进工程仿真技术的基础框架.全新的项目视图概念将整个仿真过程紧密地组合在一起,引导用户通过简单的鼠标拖曳操作完成复杂

《FLUENT 14.0超级学习手册》——2.4 FLUENT与ANSYS Workbench

2.4 FLUENT与ANSYS Workbench FLUENT 14.0超级学习手册 FLUENT 14.0被集成到ANSYS Workbench平台后,其使用方法有了一些新特点.为了让读者更好地在ANSYS Workbench平台中使用FLUENT,本节将简要介绍ANSYS Workbench及其与FLUENT之间的关系. 2.4.1 ANSYS Workbench简介 ANSYS Workbench提供了多种先进工程仿真技术的基础框架.全新的项目视图概念将整个仿真过程紧密地组合在一起,引

《ANSYS Workbench 14有限元分析自学手册》——2.3 绘制草图

2.3 绘制草图 ANSYS Workbench 14有限元分析自学手册 在Design Modeler中,草图是在平面上创建的,二维草图的绘制首先必须建立或选择一个工作平面.所以在绘制草图前首先要懂得如何进行绘图之前的设置及如何创建一个工作平面. 2.3.1 长度单位制 在创建一个新的设计模型或导入模型到Design Modeler后,第一次进入到Design Modeler后,首先会出现一个如图2-29所示的长度单位对话框,供用户选择需要的长度单位制.在建模过程中,单位一旦设置后是不可以更改

《ANSYS Workbench有限元分析实例详解(静力学)》——2.2 功能设置

2.2 功能设置 1.Project Management设置WB启动目录.临时文件目录.启动时是否加载导读对话框及是否加载新闻信息等.其中: Default Folder for Permanent Files:WB启动的默认目录,建议改为非系统盘目录. Folder for Temporary Files:WB临时文件放置目录,建议改为非系统盘目录. 2.Appearance设置背景.文字及几何图形的颜色等.其中: Background Color:设置WB背景,可以改变为白色. Beta

《ANSYS CFX 14.0超级学习手册》——第2章 CFX软件简介2.1 CFX的软件构成

第2章 CFX软件简介 ANSYS CFX 14.0超级学习手册CFX软件是目前国际应用最广泛的商用CFD软件之一,可求解与流体.热传递及化学反应和燃烧等相关的工程问题.CFX具有丰富的物理模型.先进的数值方法以及强大的前后处理功能,在航空航天.汽车设计.石油天然气.涡轮机设计等方面有着广泛的应用.本章将介绍CFX软件的结构和文件类型. 学习目标: 掌握CFX软件的结构体系: 掌握CFX计算的分析过程中所用到的软件模块:前处理.求解管理及后处理: 掌握CFX整个分析过程中产生的文件类型及其内容.