[Swift通天遁地]5、高級擴展-(7)UIView(視圖類型)的各類擴展方法

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

目錄:[Swift]通天遁地Swiftios

本文將演示視圖類型(UIView)在frame/約束/旋轉/縮放/圓角/各類手勢等一些實用擴展方法。git

首先確保在項目中已經安裝了所需的第三方庫。github

點擊【Podfile】,查看安裝配置文件。swift

1 platform :ios, '12.0'
2 use_frameworks!
3 
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'EZSwiftExtensions'
7 end

根據配置文件中的相關配置,安裝第三方庫。數組

而後點擊打開【DemoApp.xcworkspace】項目文件。微信

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】app

如今開始編寫代碼,對基本類型:Int、String、Array、Dictionary、Date擴展。ide

  1 import UIKit
  2 //在當前的類文件中,引入已經安裝的第三方類庫
  3 import EZSwiftExtensions
  4 
  5 class ViewController: UIViewController {
  6 
  7     override func viewDidLoad() {
  8         super.viewDidLoad()
  9         // Do any additional setup after loading the view, typically from a nib.
 10         //用來對視圖類的初始化方法的擴展
 11         basicUIViewExample()
 12         //快速得到視圖的各個屬性信息
 13         viewFrameSize()
 14         //根據一個視圖,肯定另外一個視圖的位置和尺寸
 15         accordingToOtherViews()
 16         //用來視圖之間的對齊操做
 17         alginViews()
 18         //用來旋轉視圖
 19         rotateView()
 20         //縮放視圖
 21         scaleView()
 22         //視圖的圓角和邊框操做
 23         roundView()
 24         //如何給視圖快速添加觸摸手勢
 25         addTapGesture()
 26         //給視圖添加手指輕掃的手勢
 27         addSwipeGesture()
 28         //給視圖添加拖拽手勢
 29         addPanGesture()
 30         //給視圖添加捏合手勢
 31         addPinchGesture()
 32         //給視圖添加長按手勢
 33         addLongPressGesture()
 34         //對按鈕類型的擴展
 35         buttonExample()
 36     }
 37     
 38      //添加一個方法,用來對視圖類的初始化方法的擴展
 39     func basicUIViewExample()
 40     {
 41         //初始化一個指定座標和尺寸的視圖對象
 42         let myView = UIView(x: 20, y: 20, w: 200, h: 200)
 43         //設置視圖對象的背景顏色爲橙色
 44         myView.backgroundColor = UIColor.orange
 45         //將視圖添加到根視圖
 46         self.view.addSubview(myView)
 47         //在控制檯輸出視圖的顯示區域信息
 48         print(myView.frame)
 49         
 50         //設置視圖對象的父視圖,
 51         //快速建立一個和父視圖相同顯示區域的子視圖
 52         let myView2 = UIView(superView: myView)
 53         //設置視圖對象的背景顏色爲紫色
 54         myView2.backgroundColor = UIColor.purple
 55         //將視圖添加到父視圖中
 56         myView.addSubview(myView2)
 57         //在控制檯輸出視圖的顯示區域信息
 58         print(myView2.frame)
 59         
 60         //設置視圖對象的父視圖,
 61         //快速建立一個和父視圖相同顯示區域的子視圖
 62         //另外設置父視圖的內邊距爲20
 63         let myView3 = UIView(superView: myView2, padding: 20)
 64         //設置視圖對象的背景顏色爲洋紅色
 65         myView3.backgroundColor = UIColor.magenta
 66         //將視圖添加到父視圖中
 67         myView2.addSubview(myView3)
 68         //在控制檯輸出視圖的顯示區域信息
 69         print(myView3.frame)
 70     }
 71     
 72     //添加一個方法,快速得到視圖的各個屬性信息
 73     func viewFrameSize()
 74     {
 75         //初始化一個指定座標和尺寸的視圖對象
 76         let view = UIView(x: 0, y: 0, w: 100, h: 100)
 77         //水平座標
 78         print(view.x)
 79         //垂直座標
 80         print(view.y)
 81         //寬度
 82         print(view.w)
 83         //高度
 84         print(view.h)
 85         //頂部位置
 86         print(view.top)
 87         //底部位置
 88         print(view.bottom)
 89         //左側位置
 90         print(view.left)
 91         //右側位置
 92         print(view.right)
 93         //原點
 94         print(view.origin)
 95         //中心點水平座標
 96         print(view.centerX)
 97         //中心點垂直座標
 98         print(view.centerY)
 99         //尺寸
100         print(view.size)
101         //背景顏色爲橙色
102         view.backgroundColor = UIColor.orange
103         //將視圖添加到根視圖
104         self.view.addSubview(view)
105         
106         //若是須要調整視圖的座標和尺寸,
107         //只須要從新設置視圖的四個屬性便可。
108         view.x = 40
109         view.y = 40
110         view.w = 200
111         view.h = 300
112         print(view.x)
113     }
114 
115     //添加一個方法,根據一個視圖,肯定另外一個視圖的位置和尺寸
116     func accordingToOtherViews()
117     {
118         //初始化一個指定座標和尺寸的視圖對象
119         let view = UIView(x: 40, y: 40, w: 100, h: 100)
120         //設置視圖對象的背景顏色爲灰色
121         view.backgroundColor = UIColor.gray
122         //初始化另外一個視圖對象,
123         //並設置該視圖在水平方向上,位於上個視圖右側20點的位置。
124         //並設置該視圖在垂直方向上,位於上個視圖下方20點的位置。
125         let view2 = UIView(x: view.rightOffset(20), 
126                            y: view.bottomOffset(20),
127                            w: 100,
128                            h: 200)
129         //設置第二個視圖對象的背景顏色爲橙色
130         view2.backgroundColor = UIColor.orange
131         //經過視圖數組,所有添加到根視圖
132         self.view.addSubviews([view, view2])
133     }
134     
135     //添加一個方法,用來視圖之間的對齊操做
136     func alginViews()
137     {
138         //初始化一個指定座標和尺寸的視圖對象
139         let view = UIView(x: 0, y: 0, w:200, h: 100)
140         //設置視圖對象的背景顏色爲紫色
141         view.backgroundColor = UIColor.purple
142         //初始化另外一個視圖對象,
143         let view2 = UIView(x: 0, y: 0, w: 100, h: 200)
144         //設置第二個視圖對象的背景顏色爲橙色
145         view2.backgroundColor = UIColor.orange
146          //經過視圖數組,所有添加到根視圖
147         self.view.addSubviews([view, view2])
148         
149         //第一個視圖和根視圖保持水平居中
150         view.centerXInSuperView()
151         //第二個視圖和根視圖保持水平和垂直居中
152         view2.centerInSuperView()
153     }
154 
155     //添加一個方法,用來旋轉視圖
156     func rotateView()
157     {
158         //初始化一個指定座標和尺寸的視圖對象
159         let mainview = UIView(x: 40, y: 40, w: 200, h: 100)
160         //設置視圖對象的背景顏色爲橙色
161         mainview.backgroundColor = UIColor.orange
162 
163         //將視圖對象沿着水平軸向,旋轉45度
164         //mainview.setRotationX(45)
165 
166         //將視圖對象沿着Z軸方向,旋轉45度
167         mainview.setRotationZ(45)
168         //將視圖對象添加到根視圖
169         self.view.addSubview(mainview)
170     }
171 
172     //添加一個方法,用來縮放視圖
173     func scaleView()
174     {
175         //初始化一個指定座標和尺寸的視圖對象
176         let mainview = UIView(x: 80, y: 200, w: 100, h: 100)
177         //設置視圖對象的背景顏色爲橙色
178         mainview.backgroundColor = UIColor.orange
179         //設置視圖在水平方向上放大2倍,垂直方向上放大4倍。
180         mainview.setScale(x: 2, y: 4)
181         //將縮放後的視圖對象添加到根視圖。
182         self.view.addSubview(mainview)
183     }
184 
185     //添加一個方法,視圖的圓角和邊框操做
186     func roundView()
187     {
188         //初始化一個指定座標和尺寸的視圖對象
189         let mainview = UIView(x: 40, y: 40, w: 200, h: 200)
190         mainview.setCornerRadius(radius: 40)
191         //設置視圖對象的背景顏色爲橙色
192         mainview.backgroundColor = UIColor.orange
193 
194         //設置視圖對象的寬度爲6,顏色爲黑色
195         //mainview.addBorder(width: 6, color: UIColor.black)
196 
197         //僅給視圖添加底部的邊框
198         mainview.addBorderBottom(size: 20, color: UIColor.red)
199         //將視圖對象添加到根視圖。
200         self.view.addSubview(mainview)
201     }
202 
203     //添加一個方法,如何給視圖快速添加觸摸手勢
204     func addTapGesture()
205     {
206         //初始化一個指定座標和尺寸的視圖對象
207         let mainview = UIView(x: 40, y: 40, w: 240, h: 240)
208         //設置視圖對象的背景顏色爲橙色
209         mainview.backgroundColor = UIColor.orange
210         /*
211         //給視圖對象添加一個觸摸手勢
212         //並設置在一個代碼塊中,響應觸摸的事件
213         mainview.addTapGesture
214         {
215             //當視圖對象被點擊時
216             (gesture) -> () in
217             //在控制檯輸出相應的日誌信息
218             print("view tapped")
219         }
220         */
221         
222         //使用代理方法,處理交互事件。
223         //視圖的觸摸事件,將由當前的視圖控制器對象來處理
224         mainview.addTapGesture(target: self, action: #selector(ViewController.viewTapped))
225         //將視圖對象添加到根視圖
226         self.view.addSubview(mainview)
227     }
228     
229     //添加一個方法,響應視圖的觸摸事件
230     @objc func viewTapped()
231     {
232         print("view tapped")
233     }
234 
235     //添加一個方法,給視圖添加手指輕掃的手勢
236     func addSwipeGesture()
237     {
238         //初始化一個指定座標和尺寸的視圖對象
239         let mainview = UIView(x: 40, y: 40, w: 240, h: 240)
240         //設置視圖對象的背景顏色爲橙色
241         mainview.backgroundColor = UIColor.orange
242         
243         //給視圖對象添加一個輕掃手勢,
244         //並設置在一個代碼塊中,響應輕掃的事件
245         mainview.addSwipeGesture(direction: UISwipeGestureRecognizer.Direction.down)
246         { 
247             //當視圖對象被輕掃時,
248             //在控制檯輸出滑動手勢的方向,以及手指的數目
249             (Swiped) -> () in
250             print(Swiped.direction)
251             print(Swiped.numberOfTouchesRequired)
252         }
253         //將視圖對象添加到根視圖
254         self.view.addSubview(mainview)
255     }
256 
257     //添加一個方法,給視圖添加拖拽手勢
258     func addPanGesture()
259     {
260         //初始化一個指定座標和尺寸的視圖對象
261         let mainview = UIView(x: 40, y: 40, w: 240, h: 240)
262         //設置視圖對象的背景顏色爲橙色
263         mainview.backgroundColor = UIColor.orange
264         //得到視圖中心點的位置
265         var originP = mainview.center
266         //給視圖對象添加一個拖拽手勢
267         //並設置在一個代碼塊中,響應拖拽的事件
268         mainview.addPanGesture
269         { 
270             (pan) -> () in
271             //當手勢事件處於開始狀態時,            
272             if(pan.state == .began)
273             {
274                 //得到視圖此時的中心點的位置
275                 originP = mainview.center
276             }
277             //得到拖拽手勢在視圖中的移動距離
278             let distance = pan.translation(in: mainview)
279             //通過計算,得到視圖通過拖拽以後的目標位置
280             let result = CGPoint(x: originP.x+distance.x, y: originP.y+distance.y)
281             //刷新視圖中心點的座標。從而改變視圖的位置
282             mainview.center = result
283         }
284         //將視圖對象添加到根視圖
285         self.view.addSubview(mainview)
286     }
287 
288     //添加一個方法,給視圖添加捏合手勢
289     func addPinchGesture()
290     {
291         //初始化一個指定座標和尺寸的視圖對象
292         let mainview = UIView(x: 40, y: 120, w: 240, h: 240)
293         //設置視圖對象的背景顏色爲橙色
294         mainview.backgroundColor = UIColor.orange
295         //給視圖對象添加一個捏合手勢
296         //並設置在一個代碼塊中,響應捏合的事件
297         mainview.addPinchGesture
298         { (pinch) -> () in
299             //輸出捏合手勢的縮放比例
300             print(pinch.scale)
301             //經過捏合手勢的縮放比例,實時調整視圖的顯示比例
302             mainview.setScale(x: pinch.scale, y: pinch.scale)
303         }
304         //將視圖對象添加到根視圖
305         self.view.addSubview(mainview)
306     }
307 
308     //添加一個方法,給視圖添加長按手勢
309     func addLongPressGesture()
310     {
311         //初始化一個指定座標和尺寸的視圖對象
312         let mainview = UIView(x: 40, y: 120, w: 240, h: 240)
313         //設置視圖對象的背景顏色爲橙色
314         mainview.backgroundColor = UIColor.orange
315         //給視圖對象添加一個長按手勢
316         //並設置在一個代碼塊中,響應長按的事件
317         mainview.addLongPressGesture
318         { (long) -> () in
319             //當視圖長按時,使視圖左右晃動三次
320             mainview.shakeViewForTimes(3)
321             //並給視圖添加一個陰影
322             mainview.addShadow(offset: CGSize(width:10, height:10) , radius: 10, color: .brown, opacity: 0.75)
323         }
324         //將視圖對象添加到根視圖
325         self.view.addSubview(mainview)
326     }
327 
328     //添加一個方法,對按鈕類型的擴展
329     func buttonExample()
330     {
331         //使用擴展後的初始化語句初始化按鈕,並設置相關屬性
332         let myButton = UIButton(x: 20, y: 40, w: 280, h: 50,//座標、尺寸
333                                 target: self, //目標
334                                 action: #selector(ViewController.myButtonClicked))//動做
335         //將按鈕控件移動至根視圖的中心位置
336         myButton.center = self.view.center
337         //正常狀態時的背景顏色
338         myButton.setBackgroundColor(UIColor.orange, forState: .normal)
339         //高亮狀態時的背景顏色
340         myButton.setBackgroundColor(UIColor.magenta, forState: .highlighted)
341         //正常狀態下的標題文字
342         myButton.setTitle("Tap me", for: .normal)
343         
344         //設置按鈕的背景顏色爲橙色
345         self.view.backgroundColor = UIColor.orange
346         //並將按鈕添加到根視圖
347         self.view.addSubview(myButton)
348     }
349     
350     @objc func myButtonClicked()
351     {
352         print("buttonPressed")
353     }
354 
355     override func didReceiveMemoryWarning() {
356         super.didReceiveMemoryWarning()
357         // Dispose of any resources that can be recreated.
358     }
359 }
相關文章
相關標籤/搜索