UIView
看了网上有很多关于UIView的教程和文章,决定写一个自己的笔记来帮助自己理解学习到的只是。
UIview是画面上的一个区域,我认为学习UIView就要去看UIView里面的属性,还有功能。 我们暂时不需要去理解这些具体都是什么,但是一定要知道有哪些属性和方法。
以后用到这些方法的时候,在慢慢理解,这些方法和属性不仅仅是UIView会用到,UILabel,UIButton也可能用的到
UIView属性
- frame:相对父视图的坐标和大小(x,y,w,h)
- bounds:相对自身的坐标和大小,所以bounds的x和y永远为0(0,0,w,h)
- center:相对父视图的中点坐标
- transform:控制视图的放大缩小和旋转
- superview:获取父视图
- subviews:获取所有子视图
- alpha:视图的透明度(0.0-1.0)
- tag:视图的标志(Int类型,默认等于0),设置后,可以通过viewWithTag方法拿到这个视图
UIView 常用方法 (最常用的的在上面)
- func addSubview(view:UIView):添加视图到父视图
- func viewWithTag(tag:Int)->UIView?:根据tag值获取视图
- func bringSubviewToFront(view:UIView):把视图移到最顶层
- func sendSubviewToBack(view:UIView):把视图移到最底层
- func insertSubview(view:UIView, atIndex index:Int):指定一个位置插入一个视图,index越小,视图越往下
- func removeFromSuperview():将视图从父视图中移除
- func exchangeSubviewAtIndex(index1:Int, withSubviewAtIndex index2:Int):将index1和index2位置的两个视图互换位置
- func insertSubview(view:UIView,belowSubview siblingSubview:UIView):在指定视图的下面插入视图
- func insertSubview(view:UIVIew,aboveSubview siblingSubview: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)
}
Screen Shot 2016-12-07 at 10.07.44 PM.png
代码一解释
这段代码是在讲如何 产生一个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
通过代码三,应该要懂得UIView的三个类,CGPoint,CGSize,CGRect
CGPoint是坐标,也就是 x 坐标, y 坐标 这两个属性
CGSize是大小,也就是width 和 height 这两个属性
CGRect是起始坐标以及大小
这里获取中心的时候没有用到frame.origin
, 因为frame是一个CGRect,而CGRect是一个起始坐标以及大小,并没有包括中心坐标,所以不可以用
网友评论