视图与手势-UICorntroller
目录
创建3个视图对象,其中第二个视图是第三个视图的父视图
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建3个视图对象,其中第二个视图是第三个视图的父视图
let view1 = UIView(frame: CGRect(x: 20, y: 80, width: 200, height: 200))
view1.backgroundColor = UIColor.red
self.view.addSubview(view1)
let view2 = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view2.bounds = CGRect(x: -40, y: -40, width: 200, height: 200)
view2.backgroundColor = UIColor.yellow
self.view.addSubview(view2)
let viewSub = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
viewSub.backgroundColor = UIColor.blue
view2.addSubview(viewSub)
}
}
视图的添加与删除,以及切换视图在父视图中的层次
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 视图的添加与删除,以及切换视图在父视图中的层次
// 初始化一个原点在(30,50),尺寸为(200,200)的巨型常量
let rect = CGRect(x: 30, y: 50, width: 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, width: 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, width: 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, width: 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, width: 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()
}
}
给图片添加颜色相框
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, width: 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)
}
}
给矩形图片添加圆角效果
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, width: 200 ,height: 200)
imageView.frame = rect
// 设置角半径
imageView.layer.cornerRadius = 100
// 裁剪
imageView.layer.masksToBounds = true
self.view.addSubview(imageView)
}
}
给图像视图添加投影效果
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, width: 200, height: 200)
imageView.frame = rect
// 设置图像视图层的阴影颜色为黑色
imageView.layer.shadowColor = UIColor.black.cgColor
// 设置图像视图层,阴影的横向和纵向便宜值
imageView.layer.shadowOffset = CGSize(width: 10.0, height: 10.0)
// 设施图像视图层的阴影透明度
imageView.layer.shadowOpacity = 0.45
// 设置图像视图层的阴影半径大小
imageView.layer.shadowRadius = 10
self.view.addSubview(imageView)
}
}
创建一个具有渐变填充色的图形
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 创建一个具有渐变填充色的图形
let rect = CGRect(x: 30, y: 60, width: 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)
}
}
创建一个具有纹理的图形(图片尺寸要小)
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-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, width: 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
}
}
使用手势功能,完成视图的交互操作,并弹窗
使用UITapGestureRecognizer类
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 使用手势功能,完成视图的交互操作
let rect = CGRect(x: 32, y: 80, width: 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)
}
}
长按手势,完成视图的交互功能
使用 UILongPressGestureRecognizer 类
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 长按手势,完成视图的交互功能
let rect = CGRect(x: 32, y: 80, width: 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)
}
}
}
使用双击手势,完成交互功能
使用UITapGestureRecognizer类
用 UISwipeGestureRecognizer - 响应双击手势的类型
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 长按手势,完成视图的交互功能
let rect = CGRect(x: 32, y: 80, width: 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)
}
}