1.描述
苹果官方文档描述:
- An object that manages the content for a rectangular area on the screen.
- UIView是一个用于管理屏幕上的一个矩形区域内容的对象.
class UIView : UIResponder
UIView继承自UIResponder,这里不展开描述.
视图(View)是我们App与用户交互的基本组成部分,UIView定义了对于所有视图的通用行为.视图通过矩形边界渲染内容,可以处理内容上面的任何交互.我们还可以通过UIView的子类来绘制更加复杂的内容.同时UIKit也提供给我们一些现有的子类来方面我们开发App.
下面介绍一些视图对象的职责:
-
绘制和动画
- 通过UIKit或者Core Graphics库来绘制矩形区域的内容
- 某些视图属性可以通过动画方式变化
-
布局和子视图管理
- 视图可以包含0个以上的子视图
- 视图可以调整他们子视图的大小和位置
- 使用自动布局来定义视图在视图树中的大小和位置的规则
视图树:一个方便管理视图内容的,有子视图和父视图关系的层级关系树,父视图和子视图是一对多关系.
-
处理交互事件
- 视图是UIResponder的子类,所以能够顾响应触摸和其它类型的事件
- 视图可以设置手势识别来处理一般的手势操作
可以使用addSubview(_:)
来添加任意子视图,最后添加的视图在父视图最上方,视图使用z-order
来区分层级关系.可以使用insertSubview(_:aboveSubview:)
和insertSubview(_:belowSubview:)
来在添加时候改变视图的索引位置,对于已经添加的视图可以通过exchangeSubview(at:withSubviewAt:)
来改变视图位置.
2.代码实例
//初始化视图并且指定frame
let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
//设置背景色
myView.backgroundColor = UIColor.red
//默认情况下,一个视图的tintColor为nil,它会使用父视图tintColor属性的值。如果在视图层次结构中没有找到一个非默认的tintColor值,则会使用系统定义的颜色值(蓝色,RGB值为[0,0.478431,1]),一般用于button的文字颜色,在UIView上没有效果
myView.tintColor = UIColor.green
//添加子视图
view.addSubview(myView)
//设置隐藏
myView.isHidden = true;
//设置透明度
myView.alpha = 0.5;
//frame
let frame = myView.frame
//bounds
let bounds = myView.bounds
//中心位置
let centerPoint = myView.center
print("frame is \(frame),\nbounds is \(bounds),\ncenterPoint is \(centerPoint)\n")
//父视图
let superView = myView.superview
print("superView is \(String(describing: superView))")
//子视图集合
let subViews: Array = myView.subviews
print("subViews is \(subViews)")
//接收view的window对象,如果该view被添加到某个window上则返回window对象,否则返回nil
let window = myView.window
print("window is \(String(describing: window))")
//判断是否是参数视图或者其子视图
let isDescendant = myView.isDescendant(of: view)
let isDescendant = myView.isDescendant(of: UIView())
print("isDescendant is \(isDescendant)")
//安全区域的边界值
print("myView.safeAreaInsets is \(myView.safeAreaInsets)")
//view的标识,默认为0
print("myView.tag is \(myView.tag)")
//设置view的tag
myView.tag = 100
//获取对应tag的view对象
let tagView = view.viewWithTag(100)
print("tagView is \(tagView!)")
let subView = UIView(frame: CGRect(x: 10, y: 10, width: 50, height: 50))
subView.backgroundColor = UIColor.systemBlue
myView.addSubview(subView)
/**
*[viewB convertRect:viewC.frame toView:viewA];
*计算viewB上的viewC相对于viewA的frame
*
*/
print("myView.convert(subView.frame, to: self.view) is \(myView.convert(subView.frame, to: self.view))")
//简单是View动画
UIView.animate(withDuration: 1.0) {
myView.frame = CGRect(x: 150, y: 150, width: 100, height: 100)
}
print("======Hello UIView!======")
- 工程下载地址:
https://github.com/DeveloperZhang/SwiftStudyDemo
3.总结
UIView是一个最基础常见的视图类,可以参考文档进行深入学习:UIKit->Views and Controls->UIView