触摸与手势学习-swift

时间:2022-09-16 15:02:44

触摸是一个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("下轻扫")
}