手势识别的 创建 与 方法

/// 手势识别器

// 1. 轻拍手势

// 手势需要在定义是绑定一个触发方法(SEL)

//    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];

//

//    // 轻拍的设置

//    // 需要轻拍两次 才响应事件

//    tap.numberOfTapsRequired = 2;

//    // 需要几根手指 才响应事件

//    tap.numberOfTouchesRequired = 2;

//    // 给view添加一个手势

//    [imageView addGestureRecognizer:tap];

//    [tap release];

// 2. 长按手势(longPress)

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];

// 长按 触发方法 需要时间

longPress.minimumPressDuration = 2;

// 长按时 允许用户移动手指的距离

longPress.allowableMovement = 100;

[imageView addGestureRecognizer:longPress];

[longPress release];

// 3. 清扫手势(swipe)

//    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];

//    // 设置清扫方向

//    swipe.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;

//

//    [imageView addGestureRecognizer:swipe];

//    [swipe release];

//    // 4.拖拽手势(pan)

//    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];

//

//    [imageView addGestureRecognizer:pan];

//    [pan release];

//

//

//

//

//    // 5.旋转(rotation)

//    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];

//

//    [imageView addGestureRecognizer:rotation];

//    [rotation release];

//

//

//

//

//    // 6. 捏合手势(pinch)

//    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];

//

//    [imageView addGestureRecognizer:pinch];

//    [pinch release];

// 7. 屏幕边缘的拖拽

UIScreenEdgePanGestureRecognizer *screenEdgePan = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenPan:)];

// 设置监测那一边的屏幕边缘

screenEdgePan.edges = UIRectEdgeLeft;

[imageView addGestureRecognizer:screenEdgePan];

[screenEdgePan release];

// 将UIImageView的用户交互打开,使它能响应轻拍

[imageView setUserInteractionEnabled:YES];

}

- (void)screenPan:(UIScreenEdgePanGestureRecognizer *)screenPan

{

NSLog(@"边缘拖拽");

}

// 捏合的触发方法

- (void)pinchAction:(UIPinchGestureRecognizer *)pinch

{

NSLog(@"捏合");

// 获取当前的view

UIImageView *imageView = (UIImageView *)pinch.view;

// 在x,y轴方向 放大/缩小

imageView.transform = CGAffineTransformScale(imageView.transform, pinch.scale, pinch.scale);

pinch.scale = 1;  // 放大缩小的尺度(速度)

}

// 旋转方法

- (void)rotationAction:(UIRotationGestureRecognizer *)rotation

{

NSLog(@"旋转");

// 获取到当前手势添加到的view

UIImageView *imageView = (UIImageView *)rotation.view;

// 让view旋转 利用旋转手势的旋转弧度

imageView.transform = CGAffineTransformRotate(imageView.transform, rotation.rotation);

rotation.rotation = 0;

}

// 拖拽的触发方法

- (void)panAction:(UIPanGestureRecognizer *)pan

{

NSLog(@"拖拽");

// 通过手势的view属性 获取到当前手势添加到的 view

UIImageView *imageview = (UIImageView *)pan.view;

// 获取到当前手指接触的点

CGPoint p = [pan translationInView:imageview];

// 让view变形

imageview.transform = CGAffineTransformTranslate(imageview.transform,p.x, p.y);

// 重置手势的属性

[pan setTranslation:CGPointZero inView:imageview];

}

// 清扫的触发方法

- (void)swipeAction:(UISwipeGestureRecognizer *)swipe

{

NSLog(@"清扫");

}

// 轻拍的触发方法

- (void)tapAction:(UITapGestureRecognizer *)tap

{

NSLog(@"轻拍");

}

// 长按的触发方法

- (void)longPressAction:(UILongPressGestureRecognizer *)longPress

{

if (longPress.state == UIGestureRecognizerStateBegan) {

NSLog(@"长按");

}

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

时间: 2024-09-20 15:27:32

手势识别的 创建 与 方法的相关文章

java创建多线程方法之间的区别

我们知道java中创建多线程有两种方法(详见http://blog.csdn.net/cjc211322/article/details/24999163).那么两者有什么区别呢? 一.情形一 code1 /** * ThreadTestDemo.java * @author cjc * */ public class ThreadTestDemo { public static void main(String[] args) { Ticket t=new Ticket(); t.start(

cocos2d-x-3.2创建项目方法

1.首先打开终端,cd到cocos2d-x-3.2目录下,运行命令./setup.py ,根据提示设置相应的ndk路径NDK_ROOT,sdk路径ANDROID_SDK_ROOT,ant路径ANT_ROOT,cocos2d路径COCOS_CONSOLE_ROOT = "cocos2d-x-3.2/tools/cocos2d-console/bin",也可以用open -t ~/.bash_profile 打开文件直接修改路径. 2.创建项目,在终端键入命令cocos new 文件名 -

批量创建IP方法

以下教程,将告诉大家如何在Windows系统中通过命令行,批量添加IP.目标,在本机的的网卡名称为“本地连接”的网卡中,批量添加192.168.1段的ip地址,起开始IP为10,每次增加1,知道22为止,即括号的三个参数.批量增加绑定到网卡的IP方法一直接在cmd命令行下执行如下命令:FOR /L %I IN (10,1,22) DO netsh interface ip add address "本地连接" 192.168.1.%I 255.255.255.0方法二新建一个bat文件

iOS创建界面方法的讨论

以前在入门的时候,找的入门书籍上编写的 demo 都是基于 Storyboards 拖界面的.后来接触公司项目,发现界面都是用纯代码去写复杂的 autoLayout 的.再然后,领导给我发了个 Masonry 库去看,依然是手写代码布局界面,但效率高了不少.工作一段时间,看了很多博客,也看了一些书,发现用纯代码写界面的很少,于是就在 Google 上搜 Storyboards 有什么好处,最后发现了一篇非常好的文章.在此提炼文章的一些观点,同时表达一下自己的观点. 文章链接:iOS User I

[python学习篇][廖雪峰][1]高级特性--创建生成器 方法1 a = (x for x in range(1,3))

创建一个生成器的方法: for x in range(1,10000000) ,先生成一个列表[1........9999999] 如果我们只想要后面的几个元素,会发现浪费很多空间.所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器(Generator). 要创建一个generator,有很多种方法.第一种方法很简单,只要把一个列表生成式的[]改

Android LIstView初次创建getview方法执行多次问题

写listview优化的时候,发现Listview初次创建的时候会多次执行getView方法. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&quo

创建完整性 方法

具体步骤 方法说明 链接地址:http://www.cnblogs.com/zhengcheng/p/4177669.html --创建学生表create table t_student( stuID number(4), stuname varchar2(20) NOT NULL, stupass varchar2(20) NOT NULL, cid NUMBER NOT NULL,       constraint uq_username UNIQUE(stuname),  --创建唯一约束

JavaScript正则表达式的概述_创建_方法和属性

假设用户需要在 HTML 表单中填写姓名.地址.出生日期等. 那么在将表单提交到服务器进一步处理前,JavaScript 程序会检查表单以确认用户确实输入了信息并且这些信息是符合要求的. 一.什么是正则表达式: 正则表达式(regular expression)是一个描述字符模式的对象. javaScript 的 RegExp(正则表达式的缩写) 类表示正则表达式,而 String 和 RegExp 都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数. 正则表达式主要用来验证客户端的

Java总结(九)——(线程模块 一(线程的创建(方法一)与启动,线程状态与生命周期,进程与线程))

一.进程与线程 进程:每一个独立运行的程序称为一个进程 线程:线程时一个进程内部的一条执行路径,Java虚拟机允许程序并发的运行多个执行路径 *进程中执行运算的最小单位-->线程<--处理机分配 进程与线程的区别: (1)进程有独立的运行地址空间,一个进程崩溃后不会影响到其他的进程,而线程只是 一个进程中的一个执行路径,如果有一条线程奔溃了,可能会影响到进程中的的其他线程 (2)线程有自己的栈和局部变量,多个线程共享同一进程的地址空间 (3)一个进程至少有一个线程 多线程 (1)多线程 就是在