触摸是一个UITouch对象,该对象放在一个UIEvent中,每个UIEvent包含一个或多个UITouch对象,每个UITouch对象对应一个手指。系统将UIEvent发送到应用程序上,最后应用程序将UIEvent传递给当前的一个UIView。

触摸分为5个阶段:

1)Began

2)Moved

3)Stationary

4)Ended

5)Cancelled(比如收到电话)

//触摸事件

    //手指首次触摸到屏幕
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { print("touchesBegan") //获取touches数量
let numTouches = touches.count //获取点击屏幕的次数
let tapTouches = (touches as NSSet).anyObject()?.tapCount //获取事件发生时间
let timestamp = event!.timestamp //获取当前相对于self.view的坐标
let locationPoint = (touches as NSSet).anyObject()?.locationInView(self.view) //获取上一次相对于self.view的坐标
let previousPoint = (touches as NSSet).anyObject()?.previousLocationInView(self.view) //允许使用手势
self.view.userInteractionEnabled = true //支持多点触摸
self.view.multipleTouchEnabled = true print("\(tapTouches)") //判断如果有两个触摸点
if touches.count ==
{
//获取触摸集合
let twoTouches = (touches as NSSet).allObjects //获取触摸数组
let first:UITouch = twoTouches[] as! UITouch //第1个触摸点
let second:UITouch = twoTouches[]as! UITouch //第2个触摸点 //获取第1个点相对于self.view的坐标
let firstPoint:CGPoint = first.locationInView(self.view) //获取第1个点相对于self.view的坐标
let secondPoint:CGPoint = second.locationInView(self.view) //计算两点之间的距离
let deltaX = secondPoint.x - firstPoint.x;
let deltaY = secondPoint.y - firstPoint.y;
let initialDistance = sqrt(deltaX*deltaX + deltaY*deltaY ) print("两点间距离是:\(initialDistance)")
}
} //手指在移动
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { print("touchesMoved")
} //触摸结束
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { print("touchesEnded")
} //触摸意外终止
//模拟器演示:鼠标拖动的同时,按键盘command+shift+h 相当于点击手机home键,退出应用,触发touchesCancelled事件,在打电话、等情况下也会触发
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) { print("touchesCancelled")
}

手势UIGestureRecognizer:

UITapGestureRecognizer

UIPanGestureRecognizer

UILongPressGestureRecognizer

UIPinchGestureRecognizer

UISwipeGestureRecognizer

        //点击事件
let atap = UITapGestureRecognizer(target: self, action: "tapDo:")
self.view.addGestureRecognizer(atap)
atap.numberOfTapsRequired = //单击次数
atap.numberOfTouchesRequired = //手指个数 //拖动事件
let aPan = UIPanGestureRecognizer(target: self, action: "handlenPan:")
self.view.addGestureRecognizer(aPan)
aPan.minimumNumberOfTouches = //最少手指个数
aPan.maximumNumberOfTouches = //最多手指个数 //长按事件
let aLongPress = UILongPressGestureRecognizer(target: self, action: "longPress:")
self.view.addGestureRecognizer(aLongPress)
aLongPress.minimumPressDuration = //需要长按的时间,最小0.5s //捏合事件
let aPinch = UIPinchGestureRecognizer(target: self, action: "pinchDo:")
self.view.addGestureRecognizer(aPinch) //旋转事件
let aRotation = UIRotationGestureRecognizer(target: self, action: "rotatePiece:")
self.view.addGestureRecognizer(aRotation) //轻扫事件--左轻扫
let leftSwipe = UISwipeGestureRecognizer(target: self, action: "leftSwipe:")
self.view.addGestureRecognizer(leftSwipe)
leftSwipe.direction = UISwipeGestureRecognizerDirection.Left //轻扫事件--右轻扫
let rightSwipe = UISwipeGestureRecognizer(target: self, action: "rightSwipe:")
self.view.addGestureRecognizer(rightSwipe)
rightSwipe.direction = UISwipeGestureRecognizerDirection.Right //轻扫事件--上轻扫
let upSwipe = UISwipeGestureRecognizer(target: self, action: "upSwipe:")
self.view.addGestureRecognizer(upSwipe)
upSwipe.direction = UISwipeGestureRecognizerDirection.Up //轻扫事件--下轻扫
let downSwipe = UISwipeGestureRecognizer(target: self, action: "downSwipe:")
self.view.addGestureRecognizer(downSwipe)
downSwipe.direction = UISwipeGestureRecognizerDirection.Down
 //手势

     //点击事件
func tapDo(sender:UITapGestureRecognizer)
{ print("点击事件")
} //拖动事件
func handlenPan(sender:UIPanGestureRecognizer)
{
print("拖动事件") if sender.state == .Began
{
//拖动开始
}
else if sender.state == .Changed
{
//拖动过程
}
else if sender.state == .Ended
{
//拖动结束
}
} //长摁事件
func longPress(sender:UILongPressGestureRecognizer)
{
print("长摁事件") } //捏合事件
func pinchDo(sender:UIPinchGestureRecognizer)
{
print("捏合")
} //旋转事件
func rotatePiece(sender:UIRotationGestureRecognizer)
{
print("旋转")
} //轻扫事件--左轻扫
func leftSwipe(sender:UISwipeGestureRecognizer)
{
print("左轻扫")
} //轻扫事件--右轻扫
func rightSwipe(sender:UISwipeGestureRecognizer)
{
print("右轻扫")
} //轻扫事件--上轻扫
func upSwipe(sender:UISwipeGestureRecognizer)
{
print("上轻扫")
} //轻扫事件--下轻扫
func downSwipe(sender:UISwipeGestureRecognizer)
{
print("下轻扫")
}

触摸与手势学习-swift的更多相关文章

  1. T470 Win10下触摸板手势

    T470 Win10下触摸板手势 学习了:https://forum.51nb.com/thread-1742490-1-1.html 三指横向竟然是alt+tab 学习了:http://www.xi ...

  2. Javascript高级编程学习笔记(69)—— 事件(13)触摸与手势事件

    触摸与手势事件 由于移动设备既没有鼠标也没有键盘,所以在为移动浏览器开发交互性网页时,常规的鼠标键盘事件根本不够用 所以早期的苹果为Safari 添加了一些与触摸相关的事件 随着后面Android的W ...

  3. IOS 手势-轻点、触摸、手势、事件

    1.概念 手势是从你用一个或多个手指接触屏幕时开始,直到手指离开屏幕为止所发生的所有事件.无论手势持续多长时间,只要一个或多个手指仍在屏幕上,这个手势就存在. 触摸是指把手指放到IOS设备的屏幕上,从 ...

  4. ios -- 教你如何轻松学习Swift语法(三) 完结篇

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.自动引用计数   1.自动引用计数工作机制      1.1 swift和o ...

  5. ios -- 教你如何轻松学习Swift语法(二)

    前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦.      一.可选类型(重点内容)   1.什么是可选类型?        1.1在OC开 ...

  6. ios -- 教你如何轻松学习Swift语法(一)

    目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...

  7. 一步一步学习Swift之(一):关于swift与开发环境配置

    一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Sw ...

  8. iOS手势学习UIGestureRecognizer & cocos2d 手势推荐

    iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按UIPanGestur ...

  9. JavaScript触摸与手势事件

    JavaScript触摸与手势事件 发表于 2012-12-10 由 admin iOS版Safari为了向开发人员传达一些特殊信息,新增了一些专有事件.因为iOS设备既没有鼠标也没有键盘,所以在为移 ...

随机推荐

  1. org.springframework.jdbc.datasource

    org.springframework.jdbc.datasource.DataSourceUtils /** * Actually obtain a JDBC Connection from the ...

  2. jquery checkbox获取多个选项

    http://www.jb51.net/article/27186.htm http://www.cnblogs.com/libingql/archive/2011/11/07/2238663.htm ...

  3. c while 循环

    c代码: #include <stdio.h> int main(void){ unsigned long sum=1UL; unsigned int j=1U; unsigned ; p ...

  4. 【HDOJ】5046 Airport

    DLX简单题目. /* 5046 */ #include <iostream> #include <string> #include <map> #include ...

  5. oracle删除列

    ALTER TABLE 表名 DROP COLUMN 列名;

  6. values of type NSInteger should not be used as format arguments; 关于Xcode中烦人的32位与64位警告处理方法.

    http://stackoverflow.com/questions/16075559/why-does-an-nsinteger-variable-have-to-be-casted-to-long ...

  7. 从零开始学习jQuery (十) jQueryUI常用功能实战

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站 ...

  8. import project后,出现Unable to get system library for the project

    import project 后,出现Unable to get system library for the project. 这是因为在import 一个项目的时候,没有指定android sdk ...

  9. (转载)完美解决PHP中文乱码问题

    (转载)http://www.souzz.net/html/edu/php/php1/74181.html 一.首先是PHP网页的编码 1.php文件本身的编码与网页的编码应匹配 a.如果欲使用gb2 ...

  10. Loadrunner 录制成功,但是脚本并没有产生

    LR 在用IE 录制脚本已经成功,但是结束录制以后,并没有脚本产生,在产生脚本log 中提示: [Net An. Error    (14c8:1cec)] Request Connection: R ...