1. 程式人生 > >[Swift通天遁地]五、高階擴充套件-(7)UIView(檢視型別)的各種擴充套件方法

[Swift通天遁地]五、高階擴充套件-(7)UIView(檢視型別)的各種擴充套件方法

本文將演示檢視型別(UIView)在frame/約束/旋轉/縮放/圓角/各種手勢等一些實用擴充套件方法。

首先確保在專案中已經安裝了所需的第三方庫。

點選【Podfile】,檢視安裝配置檔案。

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】

現在開始編寫程式碼,對基本型別:Int、String、Array、Dictionary、Date擴充套件。

  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 }