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


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10246430.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[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( 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(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 }
  • 相关阅读:
    (11)模糊图片操作---均值模糊
    (10)绘制形状和文字
    (9)调整图像的亮度和对比度
    (8)图像混合
    (7)opencv图片内部的基本处理
    C#中的线程池使用(二)
    C#中的线程池使用(一)
    C#中线程的委托
    为PyCharm自动配置作者信息
    为PyCharm配置QT
  • 原文地址:https://www.cnblogs.com/strengthen/p/10246430.html
Copyright © 2020-2023  润新知