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")
}
}
// 移除
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
相当于Android的TextView
- UILable:显示的文本只读,无法编辑,可以根据文字个数自动换行
- UITextView:可编辑文本,提供换行功能
- UITextField:可编辑文本,但是无法换行
UIViewController类负责创建其管理的视图,并在内存较低的时候将它们从内容中移除。
用户要在iOS上画图,需要继承UIView,然后重载里面的draw(_rect:CGRect)方法,就可以自定义画图。draw(_rect:CGRect)函数是由UIView内部自动调用或者通过setNeedsDisplay()函数来调用。因此,需要重载draw(_rect:CGRect)函数,把需要绘图的程序编写在里面。
- 邮箱 :charon.chui@gmail.com
- Good Luck!