[Swift通天遁地]三、手势与图表-(2)监听手势事件自由拖动图像视图

本文将演示监听手势事件,使图片可以自由被拖动。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

现在开始编写代码,实现监听手势事件自由拖动的图像视图。

 1 import UIKit
 2 
 3 class ViewController: UIViewController
 4 {
 5     //给类添加一个属性,作为被拖动的图像视图。
 6     var imageView : UIImageView!
 7     //添加一个属性,用于判断图片是否被按下。
 8     var isTouchInImageView : Bool = false
 9     
10     override func viewDidLoad()
11     {
12         super.viewDidLoad()
13         // Do any additional setup after loading the view, typically from a nib.
14         
15         //从项目中加载图片资源
16         let image = UIImage(named: "Star")
17         //使用图像视图显示加载的图片
18         self.imageView = UIImageView(image: image)
19         //将图像视图添加到根视图中
20         self.view.addSubview(self.imageView)
21     }
22     
23     //添加一个方法,用来监听手指按下时的事件
24     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
25     {
26         //可能时多个手指同事按下,
27         //这里获取第一个触摸对象。
28         let touch = touches.first
29         //获得触摸对象的坐标
30         let touchPoint = touch?.location(in: self.view)
31         
32         //获得图像视图的显示区域
33         let imageViewFrame = self.imageView.frame
34         //获得图像显示区域的左上角的坐标
35         let minX = imageViewFrame.origin.x
36         let minY = imageViewFrame.origin.y
37         //获得图像显示区域的右下角的坐标
38         let maxX = minX + imageViewFrame.size.width
39         let maxY = minY + imageViewFrame.size.height
40         //将触摸位置的坐标,和左上角以及右下角的坐标进行比较,
41         //从而判断触摸的位置是否位于图像的区域。
42         if (touchPoint?.x)! >= minX && (touchPoint?.y)! <= maxX && (touchPoint?.y)! >= minY && (touchPoint?.y)! <= maxY
43         {
44             //当触摸在图像区域时,设置布尔属性的值为真,
45             isTouchInImageView = true;
46             //然后在控制台输出日志信息。
47             print("You got a star.");
48         }
49     }
50     
51     //添加一个方法,用来监听手指移动时的事件
52     override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
53     {
54         //判断当触摸位置不在图像区域时,不再执行后方的代码。
55         if !isTouchInImageView
56         {
57             return;
58         }
59         //获取第一个触摸对象
60         let touch = touches.first
61         //获得触摸对象的坐标
62         let touchPoint = touch?.location(in: self.view)
63         //获得触摸对象在上一个位置时的坐标
64         let touchPrePoint = touch?.previousLocation(in: self.view)
65         //计算两个坐标之间的偏移距离
66         let disX = (touchPoint?.x)! - (touchPrePoint?.x)!
67         let disY = (touchPoint?.y)! - (touchPrePoint?.y)!
68         
69         //获得图像视图中心点的坐标
70         var centerPoint = self.imageView.center
71         //然后将该坐标和偏移距离相加,作为图像视图新的位置
72         centerPoint.x += disX
73         centerPoint.y += disY
74         //刷新图像视图中心点的坐标
75         self.imageView.center = centerPoint
76     }
77     
78     //添加一个方法,用来监听手指移动结束时的事件。
79     override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
80     {
81         //当手指移开屏幕时,设置布尔属性的值为假。
82         isTouchInImageView = false;
83     }
84     
85     override func didReceiveMemoryWarning() {
86         super.didReceiveMemoryWarning()
87         // Dispose of any resources that can be recreated.
88     }
89 }

猜你喜欢

转载自www.cnblogs.com/strengthen/p/10210565.html