zoukankan      html  css  js  c++  java
  • 视图与手势-UICorntroller

    创建3个视图对象,其中第二个视图是第三个视图的父视图

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // 创建3个视图对象,其中第二个视图是第三个视图的父视图 
            let view1 = UIView(frame: CGRect(x: 20, y: 80,  200, height: 200))
            view1.backgroundColor = UIColor.red
            self.view.addSubview(view1)
            
            let view2 = UIView(frame: CGRect(x: 0, y: 0,  200, height: 200))
            view2.bounds = CGRect(x: -40, y: -40,  200, height: 200)
            view2.backgroundColor = UIColor.yellow
            self.view.addSubview(view2)
            
            let viewSub = UIView(frame: CGRect(x: 0, y: 0,  100, height: 100))
            viewSub.backgroundColor = UIColor.blue
            view2.addSubview(viewSub)
        }
    }
    
    截屏2020-12-01 下午2.42.51

    视图的添加与删除,以及切换视图在父视图中的层次

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // 视图的添加与删除,以及切换视图在父视图中的层次
            // 初始化一个原点在(30,50),尺寸为(200,200)的巨型常量
            let rect = CGRect(x: 30, y: 50,  200, height: 200)
            // 创建相应的UIView视图
            let view = UIView(frame: rect)
            // 设置视图的背景颜色为棕色
            view.backgroundColor = UIColor.brown
            // 将视图添加到当前视图控制器的根视图
            self.view.addSubview(view)
            let btnAdd:UIButton = UIButton(type:.system)
            // 创建一个按钮,当点击此按钮时,将动态添加另一个按钮
            btnAdd.frame =  CGRect(x: 30, y: 350,  80, height: 30)
            btnAdd.tintColor = UIColor.red
      
            // 设置按钮的背景色为灰色
            btnAdd.backgroundColor = UIColor.gray
            // 设置按钮在正常状态下的标题,其它状态还包括按钮被按下等状态
            btnAdd.setTitle("Add", for: UIControl.State())
            // btnAdd.setTitle("触摸状态", for:.highlighted) //触摸状态下的文字
          
            // btnAdd.setTitleColor(UIColor.green, for: .highlighted) //触摸状态下文字的颜色
            // btnAdd.setTitleShadowColor(UIColor.yellow, for:.highlighted) //普通状态下文字阴影的颜色
            // 给按钮绑定点击事件,这样点击按钮时,将执行点击方法
            btnAdd.addTarget(self, action: #selector(ViewController.addView(_:)), for: .touchUpInside)
            // 将按钮添加到当前视图控制器的根视图
            self.view.addSubview(btnAdd)
            
            //同样创建第二个按钮,当点击这个按钮时,将切换根视图中两个视图的层次顺序
            let btBack = UIButton(frame: CGRect(x: 120, y: 350,  80, height: 30))
            // 设置按钮的背景色为灰色
            btBack.backgroundColor = UIColor.gray
            // 设置按钮在正常状态下的标题,其它状态还包括按钮被按下等状态
            btBack.setTitle("Switch", for: UIControl.State())
            btBack.addTarget(self, action: #selector(ViewController.bringViewBack(_:)), for: UIControl.Event.touchUpInside)
            self.view.addSubview(btBack)
            
            // 创建第三个按钮,当点击这个按钮时,将从当前殊途控制器的根视图中删除新添加的视图
            let btRemove = UIButton(frame: CGRect(x: 210, y: 350,  80, height: 30))
            // 设置按钮的背景色为灰色
            btRemove.backgroundColor = UIColor.gray
            // 设置按钮在正常状态下的标题,其它状态还包括按钮被按下等状态
            btRemove.setTitle("Remove", for: UIControl.State())
            btRemove.addTarget(self, action: #selector(ViewController.removeView(_:)), for: UIControl.Event.touchUpInside)
            self.view.addSubview(btRemove)
        }
        // 创建第一个按钮的点击事件
        @objc func addView(_ sender: UIButton) {
            // 初始化一个原点在(60,90),尺寸为(200,200)的矩形常量作为视图的显示区域
            let rect = CGRect(x: 60, y: 90,  200, height: 200)
            // 创建相应的UIView视图
            let view = UIView(frame: rect)
            // 设置背景色为紫色
            view.backgroundColor = UIColor.purple
            // 给视图设定一个标志
            view.tag = 1
            
            // 将视图添加到当前视图控制器的根数图
            self.view.addSubview(view)
        }
        
        @objc func bringViewBack(_ sender: UIButton) {
            // 通过刚刚给视图对象设置的标识值,找到新添加的视图
            let view = self.view.viewWithTag(1)
            // 将新添加的视图,移动到所有兄弟视图的后方
            self.view.sendSubviewToBack(view!)
        }
        
        @objc func removeView(_ sender:UIButton) {
            // 通过刚刚给视图对象设置的标识值,找到新添加的视图
            let view  = self.view.viewWithTag(1)
            // 从父视图也就是当前视图控制器的根视图中删除
            view?.removeFromSuperview()
        }
        
    }
    
    截屏2020-12-01 下午4.53.43

    给图片添加颜色相框

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // 给图片添加颜色相框
            let image = UIImage(named: "weapon")
            let imageView = UIImageView(image: image)
            
            // 初始化一个原点为(24,80)尺寸为(272,410)的矩形常量
            let rect = CGRect(x:80, y: 80,  image!.size.width * 3,height: image!.size.height * 3)
            
            imageView.frame = rect
            
            // 设置图像视图的图层边框的宽度为10,视图真正的绘图部分,是由一个图层类的对象管理的
            imageView.layer.borderWidth = 10
            imageView.layer.borderColor = UIColor.lightGray.cgColor
            
            self.view.addSubview(imageView)    
        }
    }
    
    
    截屏2020-12-01 下午5.12.43

    给矩形图片添加圆角效果

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // 给矩形图片添加圆角效果
            let image = UIImage(named: "xining")
            let imageView = UIImageView(image: image)
            
            // 初始化一个原点为(24,80)尺寸为(272,410)的矩形常量
            let rect = CGRect(x:80, y: 80,  200 ,height: 200)
            imageView.frame = rect
            // 设置角半径
            imageView.layer.cornerRadius = 100
            // 裁剪
            imageView.layer.masksToBounds = true
            self.view.addSubview(imageView)
        }
    }
    
    截屏2020-12-01 下午5.20.03

    给图像视图添加投影效果

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // 给图像视图添加投影效果
            let image = UIImage(named: "xining")
            let imageView = UIImageView(image: image)
            // 初始化一个原点为(36,80),宽度和高度为(200,200
            let rect = CGRect(x: 36, y: 80,  200, height: 200)
            
            imageView.frame = rect
            // 设置图像视图层的阴影颜色为黑色
            imageView.layer.shadowColor = UIColor.black.cgColor
            // 设置图像视图层,阴影的横向和纵向便宜值
            imageView.layer.shadowOffset = CGSize( 10.0, height: 10.0)
            // 设施图像视图层的阴影透明度
            imageView.layer.shadowOpacity = 0.45
            // 设置图像视图层的阴影半径大小
            imageView.layer.shadowRadius = 10
            
            self.view.addSubview(imageView)
            
        }
    }
    
    截屏2020-12-01 下午5.38.30

    创建一个具有渐变填充色的图形

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 创建一个具有渐变填充色的图形
            let rect = CGRect(x: 30, y: 60,  200, height: 200)
            // 定义渐变视图容器
            let gradientView = UIView(frame: rect)
            // 新建一个渐变层(实例化)
            let gradientLayer = CAGradientLayer()
            gradientLayer.frame = gradientView.frame
            
            // 设置渐变的起始颜色为黄色
            let fromColor = UIColor.yellow.cgColor
            // 设置渐变的中间颜色为红色
            let midColor = UIColor.red.cgColor
            // 设置渐变的结束颜色为紫色
            let endColor = UIColor.purple.cgColor
            
            
            // 将渐变层的颜色数组属性,设置为由三个颜色所构建的数组
            gradientLayer.colors = [fromColor,midColor,endColor]
            // 将配置好的渐变层添加到视图对象的层中
            gradientView.layer.addSublayer(gradientLayer)
            
            // 最后将渐变视图添加到根视图
            self.view.addSubview(gradientView)
        }
    }
    
    截屏2020-12-01 下午5.55.22

    创建一个具有纹理的图形(图片尺寸要小)

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 创建一个具有纹理的图形(图片尺寸要小)
            let image = UIImage(named: "try")
            // 创建一个颜色对象,并导入图片赋予该对象
            let patternColor = UIColor.init(patternImage: image!)
            // 将此颜色对象,赋值给当前根视图的背景
            self.view.backgroundColor = patternColor
            
            
        }
    }
    
    
    截屏2020-12-01 下午6.13.36

    使用视图对象的仿射变换功能,旋转视图对象

    ![截屏2020-12-02 上午12.09.30](/Users/summer/Library/Application Support/typora-user-images/截屏2020-12-02 上午12.09.30.pngimport UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 使用视图对象的仿射变换功能,旋转视图对象
            let rect = CGRect(x: 50, y: 150,  200, height: 50)
            let view = UIView(frame: rect)
            view.backgroundColor = UIColor.brown
            self.view.addSubview(view)
            
            // 创建仿射变换变量,仿射变换可以用于平移、旋转、缩放变换路径或者图形上下文
            var transform = view.transform
            // 选择使用旋转功能,对视图进行45度旋转
            transform = transform.rotated(by: 3.14/4)
            // 将变换变量赋值给视图对象,完成变换操作
            view.transform = transform
        }
    }
    
    截屏2020-12-01 下午11.54.15

    使用手势功能,完成视图的交互操作,并弹窗

    使用UITapGestureRecognizer类

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 使用手势功能,完成视图的交互操作
            let rect = CGRect(x: 32, y: 80,  256, height: 256)
            let imageView = UIImageView(frame: rect)
            
            let image = UIImage(named: "xining")
            // 使用加载的图片,创建一个图像视图
            imageView.image = image
            
            // 开启图像视图对象的交互功能
            imageView.isUserInteractionEnabled = true
            self.view.addSubview(imageView)
            
            // 创建一个手势类,这是一个抽象类,定义了所有手势的基本行为,并拥有6个子类,来检测发生在设备中的各种手势
            let guesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.singleTap(_:)))
            
            //将创建的手势指定给图像视图
            imageView.addGestureRecognizer(guesture)
        }
        
        @objc func singleTap(_ gusture:UITapGestureRecognizer) {
            // 输出手势需要匹配的屏幕被触碰的次数,它的默认值是1
            print(gusture.numberOfTapsRequired)
            // 输出手势包含的手指的数量,它的默认值是1
            print(gusture.numberOfTouchesRequired)
            let alertView = UIAlertController(title: "Information", message: "Single Tap", preferredStyle: UIAlertController.Style.alert)
            
            // 创建一个按钮,作为提示框中的确定按钮,当用户点击按钮时,将关闭提示窗口
            let OKAction = UIAlertAction(title: "OK", style: .default) { (_) in
            
            }
            // 将确定按钮添加到提示窗口
            alertView.addAction(OKAction)
            // 在当前视图控制器中展示提示按钮
            self.present(alertView, animated: true, completion: nil)
        }
    }
    
    
    截屏2020-12-02 上午12.09.30

    长按手势,完成视图的交互功能

    使用 UILongPressGestureRecognizer 类

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 长按手势,完成视图的交互功能
            let rect = CGRect(x: 32, y: 80,  256, height: 256)
            let imageView = UIImageView(frame: rect)
            
            let image = UIImage(named: "xining")
            // 使用加载的图片,创建一个图像视图
            imageView.image = image
            
            // 开启图像视图对象的交互功能
            imageView.isUserInteractionEnabled = true
            self.view.addSubview(imageView)
            
            // 创建一个长按手势类,这是一个抽象类,定义了所有手势的基本行为,并拥有6个子类,来检测发生在设备中的各种手势
            let guesture = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.LongPress(_:)))
            
            //将创建的手势指定给图像视图
            imageView.addGestureRecognizer(guesture)
        }
        
        @objc func LongPress(_ gusture:UITapGestureRecognizer) {
            // 检查手势事件的阶段
            if(gusture.state == UIGestureRecognizer.State.began){
                // 当接收到手势事件后,弹出一个提示窗口
                let alertView = UIAlertController(title: "Information", message: "Long Press", preferredStyle: UIAlertController.Style.alert)
                // 创建一个按钮,作为提示框中的确定按钮,当用户点击按钮时,将关闭提示窗口
                let OKAction = UIAlertAction(title: "OK", style: .default) { (_) in
                }
                // 将确定按钮添加到提示窗口
                alertView.addAction(OKAction)
               
                // 在当前视图控制器中展示提示按钮
                self.present(alertView, animated: true, completion: nil)
            }
        }
    }
    
    截屏2020-12-02 上午12.30.25

    使用双击手势,完成交互功能

    使用UITapGestureRecognizer类
    用 UISwipeGestureRecognizer - 响应双击手势的类型

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // 长按手势,完成视图的交互功能
            let rect = CGRect(x: 32, y: 80,  256, height: 256)
            let imageView = UIImageView(frame: rect)
            
            let image = UIImage(named: "xining")
            // 使用加载的图片,创建一个图像视图
            imageView.image = image
            
            // 开启图像视图对象的交互功能
            imageView.isUserInteractionEnabled = true
            self.view.addSubview(imageView)
            
            // 创建一个手势对象,用于检测发生在设备中的手势
            let guesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.doubleTap(_:)))
            // 设置点击次数为2,模拟双击事件
            // numberOfTapsRequired - 需要的触摸次数
            guesture.numberOfTapsRequired = 2
            // 设置手势为单次双击事件
            // numberOfTapsRequired - 所需的数量
            guesture.numberOfTouchesRequired = 1
            
            //将创建的手势指定给图像视图
            imageView.addGestureRecognizer(guesture)
        }
        // UISwipeGestureRecognizer - 响应双击手势的类型
        @objc func doubleTap(_ gusture:UISwipeGestureRecognizer) {
        
                // 当接收到手势事件后,弹出一个提示窗口
                let alertView = UIAlertController(title: "Information", message: "Double Tap", preferredStyle: UIAlertController.Style.alert)
                // 创建一个按钮,作为提示框中的确定按钮,当用户点击按钮时,将关闭提示窗口
                let OKAction = UIAlertAction(title: "OK", style: .default) { (_) in
                }
                // 将确定按钮添加到提示窗口
                alertView.addAction(OKAction)
               
                // 在当前视图控制器中展示提示按钮
                self.present(alertView, animated: true, completion: nil)
            
        }
    }
    
    截屏2020-12-02 上午12.40.07
  • 相关阅读:
    tar打包如何不打包某一个文件夹(排除某些文件夹)
    第一个SpringBoot应用
    Linux(以RHEL7为例)下添加工作区的方法|| The Way To Add Workspace On Linux
    Linux(以centos7为例)下自动挂载NTFS硬盘
    基于Moodle的IT课程辅助教育平台搭建
    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
    如何利用word2013写图文并茂的博客
    如何安装win10+Red Hat Enterprise Linux双系统?
    课堂练习:ex 4-20
    实验二 函数重载、函数模板、简单类的定义和实现
  • 原文地址:https://www.cnblogs.com/exlo/p/14078140.html
Copyright © 2011-2022 走看看