UI- 五种手势识别总结

#pragma mark - 手势  总共有五种手势  分别为 Tap点击 Pan拖拽 LongPress长时间按压 Pinch捏合手势 rotation旋转

1. 定义成员变量

UIImageView *_imgView; 定义UIImageView, 响应手势方法时调用

CGPoint originalCenter;  记录一下拖拽手势起始位置

CGAffineTransform  originalTrans; 记录一下捏合、旋转手势起始位置

2. 定义ImageView

UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)];

imgView.image = [UIImage imageNamed:@"btn_02"];

[self.view addSubview:imgView];

_imgView = imgView; //赋值

3. 打开与用户的交互能力 (至关重要,不能忘记)

imgView.userInteractionEnabled = YES;

4.Tap手势 --> 点击1次/两次

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

把这个手势添加到视图中

[imgView addGestureRecognizer:tap];

UITapGestureRecognizer *dblTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(twiceTapped)];

dblTap.numberOfTapsRequired = 2;

[imgView addGestureRecognizer:dblTap];

4.1 点击手势响应的方法

-(void)onceTapped{

NSLog(@"onceTapped");

}

-(void)twiceTapped{

NSLog(@"twiceTapped");

}

5.Pan手势 --> 拖拽

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

[imgView addGestureRecognizer:pan];

5.1 拖拽时响应的方法

-(void)viewPanned:(UIPanGestureRecognizer *)pan{

先记录一下起始位置

if (pan.state == UIGestureRecognizerStateBegan) {

originalCenter = imgView.center;

}

CGPoint transPoint = [pan translationInView:_imgView];

CGPoint center = originalCenter;

center.x += transPoint.x;

center.y += transPoint.y;

imgView.center = center;

CGPoint velocityPoint = [pan velocityInView:_imgView];

}

6. LongPress手势 --> 长时间按压

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

[imgView addGestureRecognizer:longPress];

longPress.minimumPressDuration = 1;

6.1 长时间按压响应的方法

-(void)longPressed{

NSLog(@"long Press");

}

7.  Pinch手势 --> 捏合手势

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

[imgView addGestureRecognizer:pinch];

7.1 捏合时响应的方法

-(void)pinchImg:(UIPinchGestureRecognizer *)pinch {

if (pinch.state == UIGestureRecognizerStateBegan) {

originalTrans = _imgView.transform;

}

_imgView.transform = CGAffineTransformScale(originalTrans, pinch.scale, pinch.scale);

}

8. rotation手势 --> 旋转

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

[imgView addGestureRecognizer:rotation];

8.1 旋转手势响应的方法

-(void)rotateImg:(UIRotationGestureRecognizer *)rotation{

if (rotation.state == UIGestureRecognizerStateBegan) {

originalTrans = _imgView.transform;

}

_imgView.transform = CGAffineTransformRotate(originalTrans, rotation.rotation);

if (rotation.state == UIGestureRecognizerStateEnded) {

_imgView.transform = originalTrans;

}

}

时间: 2024-08-01 08:56:22

UI- 五种手势识别总结的相关文章

【转】Android UI 五种布局

在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用JAVA代码 使用XML完全定义界面 结合使用两者,在XML中定义,在JAVA中引用和修改 Android SDK中关于UI的核心类: Android.view.View和android.view.ViewGroup android中的常见UI控件均会扩展View和ViewGroup其中有一部分是专

【转】从框架看PHP的五种境界及各自的薪资待遇

无意中看到这篇文章,有些触动,作为博客开篇,用来激励自己. 原文地址:点击打开 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法.你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便发起言语的攻击,这只是我个人的一些经验而已,你可以选择赞成或不赞成,也可以选择看与不看. 还有本人基本对这些框架中的大部分都用的时间比较长,绝对不是随便出个Hello World!就在这里评论,曾任某某底层本土公司的技术

Android常用的五种弹出对话框

一个Android开发中常用对话框的小例子,共有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

Ngui 五种点击事件实现方式及在3d场景中点透的情况

http://www.unity蛮牛.com/thread-22018-1-1.html ngui作为unity界面插件之一中,无疑是最好用,使用最多的了从自学unity到现在界面一直使用它 由于它的持续更新,我在此不得不说,确实很为开发者作想,为什么这么讲呢?大概在去年吧  当时用的那个版本已经不记得了,反正就是有个需求,要实现“无限循环”拖动,使用过以前ngui的人就知道当时是没有这个功能的,后来被自己弄出来没几天,就发现新版本中就自带了这样的东西,也就是如今ngui列子中的 Endless

Meteor 中的代码包有点特殊,分为五种

Meteor 中的代码包有点特殊,分为五种: Meteor 核心代码本身分成多个核心代码包(core package),每个 Meteor 应用中都包含,你基本上不需要花费精力来维护它们 常规 Meteor 代码包称为"isopack",或同构代码包(isomorphic package,意味着它们既能在客户端也能在服务器端工作).第一类代码包例如 accounts-ui 或 appcache 由 Meteor 核心团队维护,与 Meteor 捆绑在一起. 第三方代码包就是其他用户开发

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

Unix网络编程中的五种I/O模型_转

转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描述符.接受数据缓冲地址.大小传递给内核,但是如果此时 该与该套接口相应的缓冲区没有数据,这个时候就recvfrom就会卡(阻塞)在这里,知道数据到来的时候,再把数据拷贝到应用层,也就是传进来的地址空 间,如果没有数据到来,就会使该函数阻塞在那里,这就叫做阻塞I/O模型,如下图: 2. 非阻塞I/O模

java线程五种状态

java线程五种状态: 创建 -> 就绪 -> 运行 -> 销毁 创建 -> 就绪 -> 运行 -> 等待(缺少资源) -> 销毁 下图:各种状态转换

js五种设计模式说明与示例

第一种模式:js工厂模式 var lev=function(){         return "啊打";      };      function Parent(){             var  Child = new Object();             Child.name="李小龙";             Child.age="30";             Child.lev=lev;           retur

五种常见的 PHP 设计模式

内容 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代