概述

在何种无实体键盘的操作设备上都是通过在屏幕上的操作来完成各种想要的效果,包括iOS设备和Android设备以及其他各种操作系统的设备。所以理解并用好手势以及各种手势事件是十分十分重要的。

手势的分类

单个手指

  • 点击
  • 双击
  • 长按
  • 拖拽

两个手指

  • 捏合(两个手指之间距离变化)
  • 旋转 (两个手指连接成的直线在屏幕中旋转)

接下来将手势部分拆分成4篇文章。下面是第一篇

主要的点

  • 手指从接触屏幕到离开屏幕经历了哪些阶段以及iOS系统中各个阶段的回调函数;
  • 拖动;
  • 主要涉及的类UITouch

涉及的类
我们的视图控制器中已经集成了和用户进行交互的手势功能,我们只需要实现这些函数监听来完成我们想要的操作,我们的视图控制器继承自UIViewController而UIViewController又继承自UIResponder,UIResponder中有各种手势处理的基础函数。

  • UIViewController
  • UIResponder
  • UITouch(触碰类)
  • UIEvent (触碰事件类)

示例

为了更好的理解,在屏幕中添加一张图片,然后随着手指在屏幕上的滑动而跟随滑动。以整个ViewController为触摸对象。
仔细看代码中注释

先看图

示例代码

我们的图片放置如下:新建图片集合,将切好的各种尺寸的图拖入各个位置就可以了。

ViewController.h

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{//点对象声明CGPoint _cgLastPt;
}
@end

ViewController.m

#import "ViewController.h"
@interface ViewController ()
@end@implementation ViewController
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//将一张图片添加到屏幕中NSString* str = [NSString stringWithFormat:@"Image1.jpg"];UIImage* image = [UIImage imageNamed:str];UIImageView* iv = [UIImageView new];iv.image = image;iv.frame = CGRectMake(20, 20, 100, 200);iv.tag = 101;[self.view addSubview:iv];
}//从手指接触屏幕到离开屏幕,系统帮我们判断好了我们的动作分为以下几种情况
//和Android以及Flutter思想是一样的,手势分类也基本一样。同时手势都封装成了event(事务)//手指接触屏幕
-(void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{NSLog(@"touchesBegan");//触碰对象UITouch* touch = [touches anyObject];//获取触碰(点击)次数tapCountif (touch.tapCount == 1) {NSLog(@"single tap");}else if(touch.tapCount == 2){NSLog(@"double tap");}//开始滑动的时候赋初始值_cgLastPt = [touch locationInView:self.view];
}//手指在屏幕上滑动,可以获取拖拽的距离等信息
-(void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//NSLog(@"touchesMoved");UITouch* touch = [touches anyObject];//获取触碰点对象//相对于当前视图的坐标(self.view)CGPoint pt = [touch locationInView:self.view];//NSLog(@"x=%f,y=%f",pt.x,pt.y);//计算偏移量float xOffset = pt.x - _cgLastPt.x;float yOffset = pt.y - _cgLastPt.y;_cgLastPt = pt;//根据接触点的坐标来调整图片位置,实现图片的拖拽效果UIImageView* iv = [self.view viewWithTag:101];//变换图片位置参数//iv.frame.origin.x+xOffset:坐标值是以上一次滑动终点为基础加上本次滑动的偏移量iv.frame = CGRectMake(iv.frame.origin.x+xOffset, iv.frame.origin.y+yOffset, iv.frame.size.width, iv.frame.size.height);
}//手指离开屏幕
-(void) touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//NSLog(@"touchesEnded");
}//因特殊情况下中断手势
//例如滑动的过程中突然来电话了
-(void) touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//NSLog(@"touchesCancelled");
}
@end

iOS入门-16手势基础一相关推荐

  1. ios入门之界面基础

    学习移动app开发,我们常常从讲解基本的控件开始,如UILabel.UISearchBar.UIButton.UITextField等等.在实现一个简单的ios 应用之前,我们首先来看ios开发中一些 ...

  2. 深入了解计算机基础,计算机入门《计算机基础知识》(全16集)

    计算机入门<计算机基础知识>是一套比较经典的老教程,里面个别章节有些过时,但是原的东西讲的很好永不过时,对于想了解电脑.计算机的初学者是很好的教程,课程讲的十分详细.深入浅出,相对于< ...

  3. iOS 10应用开发基础教程

    iOS 10应用开发基础教程 介绍: 本教程是国内第一本iOS 10开发应用教程.本教程基于Xcode 8.0,使用Swift 3.0语言讲解如何开发iOS 10的应用App. 学习建议:本教程针对i ...

  4. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  5. Python从入门到实战 基础入门视频教程(讲解超细致)-黄勇-专题视频课程

    Python从入门到实战 基础入门视频教程(讲解超细致)-4123人已学习 课程介绍         Python基础入门视频教程:本课程从Python入门到纯Python项目实战.超100以上课时, ...

  6. ios开发学习-手势交互(Gesture)效果源码分享

    qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...

  7. 系列:iOS开发-C语言基础

    #系列:iOS开发-C语言基础 之前也说了iOS中的OC是扩充C的面向对象编程语言 那么无论是从什么角度来说都要首先回顾一下C的内容,虽然很多人在大学的时候都有学习过C语言,一提到谭浩强,我估计90% ...

  8. 网络知识入门:路由器基础知识全接触

    网络知识入门:路由器基础知识全接触 发布时间:2008.05.29 07:01     来源:赛迪网    作者:月伴雨 路由器综述 路由器是互联网的主要节点设备.路由器通过路由决定数据的转发.转发策 ...

  9. CTF入门指南(0基础)

    ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: Web 密码学 pwn 程序的逻辑分析,漏洞利用windows.linux.小型机等 misc 杂项,隐写,数 ...

最新文章

  1. Python初学者之ImportError: No module named moviepy.editor 的解决办法
  2. Ubuntu上使用octopress+github建立个人博客
  3. 二倍图三倍图什么意思_为什么说我们需要软件架构图?
  4. 实现对顺序表的入栈出栈操作、利用栈将十进制转化成二进制输出【数据结构实验报告】
  5. React Native 首次加载白屏优化
  6. RunLoop运行循环机制
  7. 无IDE时,使用支持HTML5的浏览器作编辑器的方法
  8. Java 实现JSON字符串、JSON对象和Java对象的相互转换(fastjson)
  9. 微信小程序-使用ColorUI
  10. 数字图像处理 冈萨雷斯 (第四版) 比特平面分层,图像重建
  11. 最短路算法——Dijkstra
  12. 转换、刻录DVD影碟光盘教程
  13. c语言 lis的nlogn算法,LCS (nlogn)
  14. 【题解】【PTA里的Python题库】7-1 身份证校验_python
  15. 消防基础知识——燃烧与火灾
  16. 银河系创投徐芳:专注B2B这片热土,燃起产业新势能 | To B 50+
  17. 在Mybaties中进行数据查询时,表中字段名和属相名没有对应起来,查询的结果总null,一下是解决方法
  18. 每周论文精读05-A2J:AnchortoJointRegressionNetwork for 3D ArticulatedPoseEstimation from a SingleDepthImage
  19. Revit修改部分楼层上的轴网
  20. 金融数学作业——二叉树方法定价(上证50ETF期权)

热门文章

  1. HTTP Analyzer汉化
  2. python项目中同级目录下包导入仍旧 No module named ‘’
  3. 中国能源统计数据1986-2020和省级能源结构(含计算步骤)
  4. [原译]模拟Office2010文件菜单的TabControl模板
  5. 页面预加载loading动画,再载入内容
  6. springboot实现简单的注册登录功能
  7. not find or load Qt Platform plugin “windows“ 报错
  8. 与吴恩达创办Coursera后,她一头扎进数字生物学
  9. 华为认证实验篇-ENSP的安装(附下载地址)
  10. 推荐系统的中的正排和倒排