[Swift通天遁地]五、高级扩展-(7)UIView(视图类型)的各种扩展
发布时间:2020-12-14 05:06:43 所属栏目:百科 来源:网络整理
导读:本文将演示视图类型(UIView)在frame/约束/旋转/缩放/圆角/各种手势等一些实用扩展方法。 首先确保在项目中已经安装了所需的第三方库。 点击【Podfile】,查看安装配置文件。 1 platform :ios, ‘ 12.0 ‘ 2 use_frameworks! 3 4 target ‘ DemoApp ‘ do 5
本文将演示视图类型(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,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,w:200,h: 100) 140 //设置视图对象的背景颜色为紫色 141 view.backgroundColor = UIColor.purple 142 //初始化另一个视图对象, 143 let view2 = UIView(x: 0,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,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,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,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,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,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,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,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,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,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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |