[Swift通天遁地]3、手勢與圖表-(2)監聽手勢事件自由拖動圖像視圖

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-tuljzxwk-kq.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftgit

本文將演示監聽手勢事件,使圖片能夠自由被拖動。github

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】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 }
相關文章
相關標籤/搜索