Swift 学习笔记 UIView

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)
    

    代码一解释

    这段代码是在讲如何 产生一个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.xview.frame.origin.y
    获取大小是view.frame.size.heightview.frame.size.width
    获取中心是view.center.xview.center.y

    通过代码一和代码二,应该要懂得frame 和 bounds 的区别,frame是和super view有联系,bounds是和father view 有联系, frame view需要设定x 和 y 坐标,但是bounds就不要需要设定,会自动设置成0
    还应该懂得建立UIView的步骤,首先制作一个CGRect,在制作UIView,最后添加进father view