[Swift通天遁地]五、高级扩展(7)UIView,视图类型的各种扩展方法

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)

➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/

➤GitHub地址:https://github.com/strengthen/LeetCode

➤原文地址:

➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。

➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[Swift]通天遁地Swift

本文将演示视图类型(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 }