UIView
看了网上有很多关于UIView的教程和文章,决定写一个自己的笔记来帮助自己理解学习到的只是。
UIview是画面上的一个区域,我认为学习UIView就要去看UIView里面的属性,还有功能。 我们暂时不需要去理解这些具体都是什么,但是一定要知道有哪些属性和方法。
以后用到这些方法的时候,在慢慢理解,这些方法和属性不仅仅是UIView会用到,UILabel,UIButton也可能用的到
UIView属性
UIView 常用方法 (最常用的的在上面)
通过代码来学习
override func viewDidLoad(){ //didLoad是程序刚运行的时候所需要的操作
super.viewDidLoad()
//代码一
var viewArea = CGRect(x: 20, y: 50, width: 200, height: 150) //定义起点和大小
let frameView = UIView(frame: viewArea) //产生一个View,在传给blueView
frameView.backgroundColor = UIColor.blue
view.addSubview(frameView) //在把这个view添加到主view上面
//代码二
viewArea = frameView.bounds.insetBy(dx: 20.0, dy: 20.0)
// viewArea = frameView.bounds.offsetBy(dx: 20, dy: 20)
let boundView = UIView(frame: viewArea)
boundView.backgroundColor = UIColor.yellow
frameView.addSubview(boundView)
//代码三
print(frameView.frame.origin.x)
print(frameView.frame.origin.y)
print(frameView.frame.size.height)
print(frameView.frame.size.width)
print(frameView.center.x)
print(frameView.center.y)
print(boundView.frame.origin.x)
print(boundView.frame.origin.y)
print(boundView.frame.size.height)
print(boundView.frame.size.width)
print(boundView.center.x)
print(boundView.center.y)
print(view.center.x)
print(view.center.y)
代码一解释
这段代码是在讲如何 产生一个UIView,我觉得比较好理解的办法是倒着推理。
如果想要产生一个UIView,我们需要用到的方法是: UIView(frame:CGRect)
, 也就是说如果想要建立一个UIView Object, 就必须要有一个frame, 这个frame必须是一个CGRect才可以。
接下来,要想要产生一个CGRect,需要用到CGRect(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
,也就是说需知道x和y坐标以及width 和 height 数值
因为CGFloat其实就是数字,所以不需要再往下推了,我们只要知道在哪一个位置创建,还有大小就足够了。
第一行代码里面的viewArea
就是一个CGRect,把它想成一个长方形就可以了
第二行代码里面的frameView
就是一个UIView了,至于为什么要做这些,我的理解是CGRect 方法是把x,y,width,height包装成一个CGRect,UIView是把CGRect包装成一个UIView
第三行代码是UIView里面的backgroundColor属性,这里设置的是蓝色
第四行代码是加进super view里面, view.addSubview(frameView)
因为addSubview是UIView下面的一个方法,所以可以直接调用
代码二解释
这段代码是 在新建的UIView里面在产生一个UIView 这里比较重要的是frame 和 bounds的 区别
一个很常见的问题就是frame 和 bounds有什么不一样,以及什么时候用frame,什么时候用bounds.
第一行代码是建立一个新的CGRect,frameView.bounds.insetBy(dx: 20.0, dy: 20.0)
,这里值得注意的是,首先这里用的是frameView.bounds
这是在说把frameView当做father View,然后在里面设置一个新的UIView,这里不能用frame是因为frame只能用在super View,而不可以是father View。之后的insetBy(x,y)
其实就是bounds里面包含的功能,详细的内容等有需要的时候再去学习
接下来的几个步骤和 代码一 很相似,就不在解释了
代码三解释
这段代码是得到view里面UIView的坐标,大小和中心坐标。这里比较重要的是想要获取坐标,和获取大小的方法相似但却不一样,大致上就这三类
获取坐标是view.frame.origin.x
和 view.frame.origin.y
获取大小是view.frame.size.height
和 view.frame.size.width
获取中心是view.center.x
和 view.center.y
通过代码一和代码二,应该要懂得frame 和 bounds 的区别,frame是和super view有联系,bounds是和father view 有联系, frame view需要设定x 和 y 坐标,但是bounds就不要需要设定,会自动设置成0
还应该懂得建立UIView的步骤,首先制作一个CGRect,在制作UIView,最后添加进father view