View
视图类UIView定义了一个矩形区域,并且管理此用户界面内的交互。视图可以管理子视图,全部子视图和自身视图一起,构成一个层次化的视图树。
我们完成一个案例,代码可以创建两个50见方的矩形,它们并排在一起,并且还有第三个视图,它嵌入在第二个视图内。三个视图的背景色分别为红、黄、蓝。当点击黄色矩形视图时,蓝色矩形会在蓝色和绿色之间切换。代码如下:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window!.rootViewController = Page()
self.window?.makeKeyAndVisible()
return true
}
}
class Page: UIViewController{
var a : UIView!
var b : UIView!
var c : UIView!
override func viewDidLoad() {
super.viewDidLoad()
a = UIView()
a.frame = CGRect(x: 0, y: 50, width: 50, height: 50)
view.addSubview(a)
a.backgroundColor = .red
b = UIView()
b.frame = CGRect(x: 50, y: 50, width: 50, height: 50)
view.addSubview(b)
b.backgroundColor = .yellow
c = UIView()
c.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
b.addSubview(c)
c.backgroundColor = .blue
let gesture = UITapGestureRecognizer(target: self, action: #selector(action(_:)))
b.addGestureRecognizer(gesture)
}
func action(_ sender:UIButton!){
c.backgroundColor = (c.backgroundColor == .green) ? .blue : .green
}
}复制代码
根视图为UIViewController.view,接下来构建出来的视图层次树为:
view
-- a
-- b
----c复制代码
每个视图都可以通过方法addSubview来加入子视图,每个子视图的位置和大小可以通过属性.frame设置。UITapGestureRecognizer可以为UIView添加手势操作。
代码演示了UIView的层次树的构造,外观和事件处理。然而UIView本身在现实代码中使用并不多,它作为基础类,定义了视图的共同行为,实际上常用的是它的子类,比如UIButton、UILabel等,它的常用子类会在下文讲解。