多点触控及一个华丽的Demo_HenryZhang的博客-程序员宅基地

技术标签: UI  原创  多点触控  iOS  

 

1.触摸过程

一次完整的触摸过程,会经历3个状态:

触摸开始:

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

触摸移动:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

触摸结束:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

触摸取消(可能会经历):

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

 

2.触摸过程的理解

 

a.4个触摸事件处理方法中,都有NSSet *touches和UIEvent *event两个参数。一次完整的触摸过程中,只会产生一个事件对象,4个触摸方法都是同一个event参数;

 

b.如果两根手指同时触摸一个view,那么view只会调用一次touchesBegan:withEvent:方法,这时touches参数中装着2个UITouch对象;

 

c.如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象;

 

d.根据touches中UITouch的个数可以判断出是单点触摸还是多点触摸;

 

e.注意: 一般默认情况下, 控件都不支持多点触摸(为了提高性能), 所以需要手动设置一个UIView 允许多点触摸!

 

3. 多点触控的一个华丽Demo

 

@interfaceCZView ()

//定义一个数组存放image图片

@property(nonatomic, strong) NSArray* images;

@end

 

@implementationCZView

//懒加载

-(NSArray*)images

{

if(!_images) {

    _images = @[ [UIImageimageNamed:@"spark_green"], [UIImageimageNamed:@"spark_red"] ];

}

return_images;

}

//手指按下屏幕

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

{

 [self addSpark:touches];

}

//手指在屏幕上移动

-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event

{

 [self addSpark:touches];

}

-(void)addSpark:(NSSet*)touches

{

inti = 0;

//获取触摸对象

for(UITouch* t in touches) {

    // 获取手指的位置

    CGPoint p = [t locationInView:t.view];

    // 创建一个imageView

    UIImageView* imageView = [[UIImageViewalloc] initWithImage:self.images[i]];

 

    // 让imageView的center等于手指的位置

    imageView.center = p;

    // 添加到控制器的view上

    [selfaddSubview:imageView];

    [UIView animateWithDuration:2

        animations:^{

            imageView.alpha = 0;

        }

        completion:^(BOOL finished) {

            [imageView removeFromSuperview];

        }];

 

    i++;

}

}

@end

输出结果:

 

 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/explore_zhang/article/details/48642719

智能推荐

HenryZhang

=======================...程序员如何有效的放松身心!下班后做什么? ====================================================== scriptmanager控件包括在asp.net 2.0 ajax extensions中,它用来处理页面上的所有组

基础篇_03_堆的初始化及 map 文件

搞嵌入式如果说不懂得堆栈可能会被怀疑学习了一个假的嵌入式。不过,坦白来说,我还是不太理解其中的细节,比如说栈的位置在哪?我们说栈是先进后出FILO形式的数据结构,堆是先进FIFO先出的形式的数据结构。栈是由...

java I/O流 例子:把一文件读到byte数组中,然后再输出到另一个文件中;

From:...//把F:/test/distribute.sql这个文件读入到byte数组中,返回这个数组 package com.cus.systemFunction.disCom; import java.io.BufferedInputStream;import ...

2021-03-17

map(i,j)表示节点i到j最短路径的距离,对于每一个节点k,检查map(i,k)+map(k,j)小于map(i,j),如果成立,map(i,j) = map(i,k)+map(k,j);遍历每个k,每次更新的是除第k行和第k列的数。 三重循环后...

2021-06-06

给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。 2.解析 3.设计 4. 分析 5.源码 [github...

xml-001:基本语法

1.xml基本语法,参见 https://www.cnblogs.com/zhouyeqin/p/7418971.html 2.实体知识补充,参见 https://blog.csdn.net/Holmofy/article/details/78130039 3.xml可以传递图片,参见 ...ht...

步进电机驱动器MD-2522.pdf下载

步进电机驱动器MD-2522.pdf 相关下载链接://download.csdn.net/download/henryzhang123456/10769425?utm_source=bbsseo

Redis安装及简介

Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。属于前一讲中的NoSQL数据库一族。 1.2. Redis与memcached的区别 1.redis可以用来做存储(storge), 而memccached是用来做缓存(cache).这个特点...

hdu2005 关于输入的技巧及初始化问题

从hdu2005开始认识到acm不仅仅是算法 ,还有一些输入的小技巧,如如何从有/的里面获取数据,这里就可以把/保存到char中,hdu2006也是,输入的格式为第一个是数表示有多少个数,而后面才跟具体的数字

hdu 2010 及动态分配数组

由hdu2010的一直出现表达错误可知不该出现的空格的地方也不要出现空格 动态分配内存的格式为int * data = new int [n];

浅谈基于TCP和UDP的协议设计

通信协议:就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。

CSS盒子外边距合并问题

今天在写一个页面的时候发现一个问题,那时候学习内外边距的时候视频中有讲解到这个外边距合并问题,但我以为是浏览器的一种bug应该不会经常遇到。其实在写嵌套盒子的时候我就遇到了,这个东西应该还是比较重要的,...

软件工程——实践者的研究方法(原始版)下载

然而还有 大量工作需要去做,今天,它已被公认为一个重要学科,值得认真地研究、细心 地学习和热烈地争论。在整个产业界,“软件工程师”已经替代“程序员”成为 更受欢迎的工作头衔。产业应用软件中已广泛而成功地...

docker

安装docker 下载官方yum源 [[email protected] ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo % Total % Received % Xferd Average Speed Time Time Time...

Memcached and libmemcached Installation on Solaris 11

It seems possible to install memcached using Solaris pkg: #pkg list -a memcached service/memcached (or see http://pkg.oracle.com/solaris/release/en/catalog.shtml)   However, since I may want t

Labview 虚拟仪器编程实例下载

Labview 虚拟仪器编程实例, 第二章 虚拟仪器软件开发平台(1) 2-1:开关和指示灯.vi 2-2:对已有VI程序操作.vi 2-3:图形性控件.vi 2-4:属性节点.vi 2-5:事件驱动.vi 2-6:加减运算.vi 2-7:比较两个数.vi 2-8: 熟悉...

LeetCode: N Queens II

Follow up for N-Queens problem. Now, instead outputting board configurations, return the total number of distinct solutions. ...a DFS search will be exponential increase in terms of N....

自己写的yaf的mysql pdo扩展

yaf没有自己的数据库扩展,正好闲着没事就花了一上午写了一个pdo的数据库扩展,支持php连贯操作,支持数组插入,更新等,因为时间有限,写的并不是很完善,还有很多要去补充,比如执行错误提示等等,先粘贴出来,...

基于java调用https接口

两种方式: 1:使用org.apache.http jar包:package ... import java.io.File; import java.nio.charset.Charset; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext;...import javax.

存储过程

dbms_output.put_line : 用于打印信息 create or replace PROCEDURE ALLJOB AS 用于创建存储过程 ,名称为 ALLJOB v1_job_1 number :=101; : 用于声明变量 在赋值的时候,使用 := 来进行赋值 ...

Understanding Memcached Source Code

I am trying to learn how memcached works by reading its testcase step by step ------------------------------------------------------------------------------------------------------------------------

在服务器上部署Java web项目的一些步骤

吐槽:我是萌新,对服务器这种没概念...首先我是公司提供的阿里云主机服务器,所以不用自己去买了,所以这个购买的这个方面我也不懂,服务器系统是window server 2008的。 第一步当然是远程连接控制我们的云主机服...

在BIRT中使用动态图片

在BIRT中使用动态图片 BIRT中插入图片的方式有4种:使用图片的URI,使用BIRT shared resources 下面的图片,直接把图片文件嵌入BIRT Template中,还要就是从数据集里面获得图片数据。前面三种方式比较容易使用,但...

hibernate用原生SQL

[code="java"] public List getListByOldSql(String sql) { Session session = null; List list = new java.util.ArrayList(); ... session = this.getSession();... list = session.createSQLQuery....

LeetCode: Combination Sum non recursive

The basic idea, shown in the previous blog  http://blog.csdn.net/u010204902/article/details/8803342 is to use DFS I tried to use non-recursive method to do the DFS. I need to maintain a st

初识HuaweiAR2220信息中心

初识AR2220信息中心...为了更好地监控网络运行状况,现为AR2220路由器搭建一台日志服务器,作为以后系统故障查找、排除的参考。 准备工作:HuaweiAR2220(V200R001C01) Dell PE4600 Redhat Enterprise Linu...

虚拟机与主机之间直接复制粘贴文件

先安装open-vm-tools:sudo apt-get install open-vm-tools  然后:sudo apt-get ...最后reboot一下子。安装了VMware Tools后需要重启后才能生效。也能解决不能全屏的问题! REF:https://blog.csdn.net/h...

sqlserver的使用

我之前用过mysql,服务器名称只要填写名称就可以,如果需要加上端口号,就是用:来连接,比如:...aliyuncs.com:3306; 登陆SQL server的时候,服务器名称:名称... ... 数据库:bigInt对应的long,有时候考虑如果用i...

FPGA Designbook part1下载

2008年,全球半导体整体销售出现25年以来首次 萎缩现象,但是,可编程器件却还在保持了增长,预计2008年可编程逻辑器件(PLD)市场销 售额增长 相关下载链接://download.csdn.net/download/henryzhang123456/1284549?...

随便推点

推荐文章

热门文章

相关标签