Skip to content

Latest commit

 

History

History
113 lines (83 loc) · 4.92 KB

2.UI基础之UIView简介.md

File metadata and controls

113 lines (83 loc) · 4.92 KB

2.UI基础之UIView简介

UIView是iOS系统中界面元素的基础,所有的界面元素都继承自它,它的本身是由CoreAnimation来实现的。

UIView就是表示屏幕上的一块矩形区域,它在APP中占有绝对重要的地位,因为iOS中几乎所有的可视控件都是的子类。UIView继承自UIResponder,它是负责显示的画布,如果说把window比作画框,我们就是不断地在画框上移除、更换或者叠加画布,或者在画布上叠加其他画布,大小当然由绘画者来决定。有了画布,就可以在上面任意施为。UIView的功能包括:管理视图区域中的内容、处理视图区域中的事件、管理子视图,以及绘图、动画等

UIView的绘图方法和触摸事件,其中触摸事件继承自UIResponder的触摸事件的方法:

  • func draw(rect:CGRect):重载该函数用于自定义绘图(UIView)。
  • _func draw(_layer:CALayer,in ctx:CGContext):重载该函数用于自定义绘图(CALayer)。
  • func touchesBegan:withEvent:当用户触摸到屏幕时调用此方法。
  • func touchesEnded:withEvent:当触摸离开屏幕时调用此方法。
  • func touchesMoved:withEvent:当用户触摸到屏幕并移动时调用此方法。
  • func touchesCancled:withEvent:当触摸被取消时调用此方法。

UIView真正的绘图部分,是由一个叫CALayer(Core Animation Layer)的类来管理的。

UIView本身更像是一个CALayer的管理器,访问它跟绘图和坐标有关的属性,实际上内部都是访问它所包含的CALayer的相关属性。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let redView = UIView()
        // frame属性是一个矩形,描述UIView的大小和在父View的坐标位置
        redView.frame = CGRect(x: 10, y: 10, width: 100, height: 100)
        // view.addSubview(redView)访问当前对象的属性,可以不使用self,但是在闭包的时候需要使用self,建议都不写self,在编译器提示错误的时候再加self
        self.view.addSubview(redView)
        redView.backgroundColor = UIColor.red
        let yellowView = UIView(frame: CGRect(x: 25, y: 25, width: 50, height: 50))
        redView.addSubview(yellowView)
        yellowView.backgroundColor = UIColor.yellow
        // 是否切除子视图超出的部分
        yellowView.clipsToBounds = true
        yellowView.alpha = 0.5
        // 是否隐藏视图
        yellowView.isHidden = false
        // 设置用户的交互特性,这个属性决定UIView是否接受并相应用户的交互
        yellowView.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(touchViewClick))
        yellowView.addGestureRecognizer(tap)
        // 缩放
        let transform = yellowView.transform
        yellowView.transform = transform.scaledBy(x: 0.5, y: 0.5)
        
        // layer.borderColor是CGColor类型,所以要用UIColor.black.cgColor
        yellowView.layer.borderColor = UIColor.black.cgColor
        yellowView.layer.borderWidth = 5
        // 渐变、阴影、圆角、边框都是通过layer来设置
        yellowView.layer.cornerRadius = 20
    }
    
    @objc func touchViewClick() {
        print("click")
    }
}

UIView一些基本方法

// 移除
myView?.removeFromSuperView()
// 添加
myView?addSubView(lable)
// 将SubView往前移动一个图层
self.view.brgingSubviewToFront(myView!)
// 往后移动一个图层
self.view.sendSubviewToBack(myView!)
// 对View设置标记
myView?.tag = 1
let otherView = UIView().viewWithTag(1)
UIView().subviews

UILable

相当于Android的TextView

  • UILable:显示的文本只读,无法编辑,可以根据文字个数自动换行
  • UITextView:可编辑文本,提供换行功能
  • UITextField:可编辑文本,但是无法换行

视图控制器(UIViewController)

UIViewController类负责创建其管理的视图,并在内存较低的时候将它们从内容中移除。

继承UIView建立自己的图形类

用户要在iOS上画图,需要继承UIView,然后重载里面的draw(_rect:CGRect)方法,就可以自定义画图。draw(_rect:CGRect)函数是由UIView内部自动调用或者通过setNeedsDisplay()函数来调用。因此,需要重载draw(_rect:CGRect)函数,把需要绘图的程序编写在里面。