Swift - 触摸事件(点击,移动,抬起等)说明及用例

在iOS开发中,UIGestureRecognizer可以方便的响应处理手势事件。

而如果要想更精细的处理,我们还需要借助touchesBegan,touchesMoved,touchesEnded等触摸方法。这些方法 都是UIResponder中的方法。视图控制器和视图类,都是UIResponder的子类。正是这个类,让UIView等相关触摸事件得以响应。

具体方法介绍如下:
1,func touchesBegan(touches: NSSet, withEvent event: UIEvent)
通知调用者当有一个或者多个手指触摸到了视图或者窗口时触发此方法。
touches是UITouch的集合,通过UITouch我们可以检测触摸事件的属性,是单拍还是双拍,还有触摸的位置等。

2,func touchesMoved(touches: NSSet, withEvent event: UIEvent)
告诉接收者一个或者多个手指在视图或者窗口上触发移动事件。
默认不允许多点触摸。如果要接收多点触摸事件必须将UIView的属性设置为true。

3,func touchesEnded(touches: NSSet, withEvent event: UIEvent)
当一个触摸事件结束时发出的UITouch实例对象。

4,func touchesCancelled(touches: NSSet, withEvent event: UIEvent)
通知接收者当系统发出取消事件的时候(如低内存消耗的告警框)

下面通过一个样例演示触摸事件得用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import UIKit
class ViewController: UIViewController {
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //支持多点触摸
        self.view.multipleTouchEnabled = true
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
     
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            var t:UITouch = touch as! UITouch
            //当在屏幕上连续拍动两下时,背景恢复为白色
            if(t.tapCount == 2)
            {
                self.view.backgroundColor = UIColor.whiteColor()
            }
                //当在屏幕上单击时,屏幕变为红色
            else if(t.tapCount == 1)
            {
                self.view.backgroundColor = UIColor.redColor()
            }
            println("event begin!")
        }
    }
     
    override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent)
    {
        for touch: AnyObject in touches {
            var t:UITouch = touch as! UITouch
            println(t.locationInView(self.view))
        }
    }
     
    override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent)
    {
        //两点触摸时,计算两点间的距离
        if touches.count == 2{
            //获取触摸点
            let first = (touches as NSSet).allObjects[0] as! UITouch
            let second = (touches as NSSet).allObjects[1] as! UITouch
            //获取触摸点坐标
            let firstPoint = first.locationInView(self.view)
            let secondPoint = second.locationInView(self.view)
            //计算两点间的距离
            let deltaX = secondPoint.x - firstPoint.x
            let deltaY = secondPoint.y - firstPoint.y
            let initialDistance = sqrt(deltaX*deltaX + deltaY*deltaY)
            println("两点间距离:\(initialDistance)")
        }
        println("event end!")
    }
     
    override func touchesCancelled(touches: Set<NSObject>, withEvent event: UIEvent)
    {
        println("event canceled!")
    }
}

转载于:https://www.cnblogs.com/Free-Thinker/p/4838421.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...

本文实例讲述了jQuery实现的响应鼠标移动方向插件用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;HTML代码如下&#xff1a;www.jb51.net jQuery响应鼠标移动*{margin:0;padding:0;}ul,li{list-style:none;}div{font-family:"Microsoft YaHei";}html,bo…

读《大道至简—是懒人造就了方法 》有感

读了大道至简第一章编程的精义之后&#xff0c;我觉得感触颇深&#xff0c;于是乎我又读了第二章是懒人造就了方法 &#xff0c;之后果然没有让我失望&#xff0c;第二章写的也是非常的好&#xff0c;非常的吸引我。 第二章的开头便引用了李冰凿山的故事&#xff0c;在战国时代…

《大道至简》第二篇读后感

今天把周爱民大道至简的第二章关于是懒人造就了方法读了几遍&#xff0c;作者通过战国时李冰凿山与愚公移山的比较来阐述懒人早就方法主题&#xff0c;以前听历史老师讲课的时候正是因为懒人才会有那么多可以节省人们力气和时间的发明&#xff0c;但懒人并不是真的懒&#xff0…

oracle备份磁盘头,ASM 磁盘头信息备份

ASM磁盘头信息保存在每个磁盘的前4K里面&#xff0c;这个信息的备份对于ASM的恢复非常重要&#xff0c;有下面的几种方法1.直接做dd来备份磁盘的前4K&#xff0c;磁盘头信息丢失时&#xff0c;dd回来 备份&#xff1a;dd if/dev/raw/raw1 of/gyj/asmheader.dd bs4096 coun…

var s=+newDate();的用法,表示对应的时间截

var snewDate(); var snewDate(); 解释如下:是不存在的; new Date()是一个东西; 相当于.valueOf(); 看到回复补充一下.getTime()这个也是得到毫秒数 //4个结果一样返回当前时间的毫秒数alert(new Date());alert(new Date);var snew Date();alert(s.valueOf()); alert(s.getTime…

asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼tblnamerequest("tb")Dim objOraSession,objOraDbDim strDbUser,strDbPwd,strDbConnCall ConnectDB()Sub ConnectDB() 连接数据库On Error Resume NextstrDbUser "liujincai" 连接用户名strDbPwd "ljc1…

jitpack让使用第三方依赖库更简单

在开发过程中&#xff0c;使用第三方优秀依赖库是个很常见的问题&#xff0c;有的时候是maven&#xff0c;或者gradle, 或者sbt,大部分库工程&#xff0c;都会有对应的gradle,maven依赖代码&#xff0c;但是有的没有&#xff0c;尤其是使用的snapshot的依赖的时候&#xff0c;虽…

linux用户命令快捷链接,linux简单命令

linux系统命令是最基础也是最重要的部分&#xff0c;下面由学习啦小编为大家整理了linux简单命令的相关知识&#xff0c;希望对大家有帮助!linux简单命令一、文件和目录家目录为 /home/user 或者 &#xff5e;目录分为两种&#xff1a;绝对目录&#xff0c;从根目录开始写相对目…

Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

通过调用微信提供的API接口&#xff0c;我们可以很方便的在应用中发送消息给微信好友&#xff0c;或者分享到朋友圈。在微信开发平台&#xff08;https://open.weixin.qq.com&#xff09;里&#xff0c;提供了详细的说明文档和样例。但由于提供的样例是使用Objective-C写的&…

linux怎么改程序图标,如何在Ubuntu Unity上修改应用程序图标

这篇文章将教大家在Ubuntu Unity上修改应用程序图标&#xff0c;这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu 12.04 等使用Unity作为默认桌面环境的发行版。在Unity桌面环境&#xff0c;程序启动器实际上以.desktop为后缀的文件的形式存储在电脑上&#xff0c;所以我们可…

php 大流量网站访问

1&#xff1a;确认服务器硬件能否支持当前流量 2&#xff1a;数据库优化&#xff0c;用到什么字段查什么字段&#xff0c;减轻查询负担。 3&#xff1a;静态化&#xff0c;缓存&#xff0c;减少连库操作。 4&#xff1a;禁止外部盗链&#xff0c;减轻负载压力。 5&#xff1a;控…

linux内核 默认路由表,Linux 默认路由表 0.0.0.0

netstat -nr命令会显示路由表的内容。网关为0.0.0.0的网络通常是直连到网络设备上的。因为到自己的直连设备上是不需要网关的&#xff0c;所以0.0.0.0的网关地址是正常的。目的地址是0.0.0.0的路由是你的缺省网关。在这个例子里,有两个网关&#xff0c;缺省的并且是到255.255.2…

htop linux命令详解,htop使用详解

在管理进程时通常要借助一些工具&#xff0c;比较常用的就是ps和top了&#xff1b;不过CentOS还为我们提供了一个更加强大的工具htop&#xff0c;下面就来了解一下此工具的使用方法。一、安装htophtop工具在epel源中提供&#xff0c;请自行配置epel源&#xff0c;也可以直接下载…

iOS 中的 xml 解析

在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析&#xff0c;使用简单 2.第三方框架 libxml2:纯c语言&#xff0c;默认包含在ios sdk中&#xff0c;同时支持DOM 和 SAX 方式解析 GDataXML &#xff1a; DOM方式解析&#xff0c;由谷歌开发&#xff0c;基于…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

linux上clisp运行lisp,apache - 重新访问linux + apache2 + mod_lisp + CLISP - 堆栈内存溢出

CLISP已安装并成功运行&#xff1a;(加载“ modlisp-clisp”)(modlisp&#xff1a;modlisp-server)运行正常&#xff0c;即无休止Python可通过localhost在/ usr / lib / cgi-bin中正常工作试图使clisp服务器在/ var / www / html / lsp中工作通过localhost / lsp打印的浏览器访…

linux解压war包乱码,linux中zip解压乱码解决方法

在windows上压缩的文件&#xff0c;是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码&#xff0c;所以linux上的unzip一般以默认编码解压&#xff0c;中文文件名会出现乱码。有2种方式解决问题&#xff1a;1、通过unzip行命令解压&#xff0c;指定字符集unzip -O …

Android沉浸式通知栏设计

转载博客&#xff1a;http://www.2cto.com/kf/201503/381348.html Android4.4新特性&#xff0c;系统状态栏一体化。 实现的步骤主要有以下几点&#xff1a; 1.android4.4 以上版本 2.设置app全屏&#xff1a; 方法&#xff1a;在AndroidManifest.xml中设置android:theme"…

linux火狐自动更新,CentOS 7手动更新firefox | Linux系统运维联盟

这里针对的是firefox无法检测到新版本&#xff0c;需要手动升级。1.下载新版的irefox&#xff0c;一般是.tar.gz压缩包。2.tar zxvf 解压到/usr/lib64 。(只要是原版firefox文件的目录就对了)3.cd /usr/lib64/firefox4../firefox-bin 完成有的更新好之后可能会无法播放视频&a…

C/C++02: Josephus问题

据说著名犹太历史学家Josephus有过以下的故事&#xff1a;在罗马人占领乔塔帕特後&#xff0c;39个犹太人与Josephus及他的朋友躲到一个洞中&#xff0c;39个犹太人决定宁愿死也不要被人抓到&#xff0c;于是决定了一个自杀方式&#xff0c;41个人排成一个圆圈&#xff0c;由第…