swift中UIView的使用

/ Mac / 没有评论 / 1455浏览

swift中UIView的使用

UIView的相关操作

import UIKit

class MainViewController: UIViewController {
  // 创建全局的view
  var myView: UIView?

  override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.red
    self.setupView()
  }

  func setupView() {
    // 创建一个view
    let view = UIView(frame: CGRect(x: 10, y: 50, width: 100, height: 100))
    view.center = CGPoint(x: 100, y: 100)
    view.backgroundColor = UIColor.orange
    self.view.addSubview(view)

    // 移除subView
    myView?.removeFromSuperview()
    // 添加subView
    myView?.addSubview(view)

    //MARK: view的层级关系
    // 将subView往前移动一个图层(与它的前一个图层对调位置)
    self.view.bringSubview(toFront: myView!)
    // 将subView往后移动一个图层(与它的后一个图层对调位置)
    self.view.sendSubview(toBack: myView!)

    // 使用subView的变数名称取得它在UIView中的索引值(index)
    let index = self.view.subviews.index(of: myView!)

    // 使用索引index交换两个subView之间的层级
    let index1: Int = 0
    let index2: Int = 1
    self.view.exchangeSubview(at: index1, withSubviewAt: index2)

    // 给view加上标记
    myView?.tag = 1000
    // 通过标记tag得到view
    let otherView = UIView().viewWithTag(1000)

    // 返回一个数组
    UIView().subviews
  }
}

只定义UIView

import UIKit

class SubView: UIView {
  // 重新父类的init方法
  // 指定初始化器
  override init(frame: CGRect) {
    super.init(frame: frame)
  }
  // 必要初始化期
  /**
  为什么一定要添加:
  这是NSCoding protocol定义的,遵守了NSCoding protoaol的所有类必须继承。只是有的情况会隐式继承,而有的情况下需要显示实现。
  
  什么情况下要显示添加:
  当我们在子类定义了指定初始化器(包括自定义和重写父类指定初始化器),那么必须显示实现required init?(coder aDecoder: NSCoder),而其他情况下则会隐式继承,我们可以不用理会。

  什么情况下会调用:
  当我们使用storyboard实现界面的时候,程序会调用这个初始化器。
  注意要去掉fatalError,fatalError的意思是无条件停止执行并打印。
  在obj-c中可以通过下面代码实现
  */
  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}