前言:推薦使用 Dash 這個軟件來查看API
文檔,比xcode
自帶的API
文檔方便太多
這些東西的關係,我到如今才整明白,分享下:swift
好比,咱們須要在一個 ViewController
的 view
中添加一個圓形的 UIView
,如何作呢?xcode
UIBezierPath
能夠畫任何形狀CGPath
是 UIBezierPath
的一個屬性,能夠從 UIBezierPath
中獲取,也就是說 UIBezierPath
是高於 CGPath
的上層模型UIView
是畫板,UIBezierPath
是畫筆,在操做的時候不是往畫板上添加東西,仍是直接在畫板上做畫UIView
的 draw()
方法中用 UIBezierPath
畫畫,不能新建 UIView
對象後再添加路徑BallView: UIView
類, 在 draw()
方法中實現畫畫的方法class BallView: UIView { override func draw(_ rect: CGRect) { // 在 rect 框架中新想一個橢圓路徑,若是 rect 是方形的,這個路徑就是正圓的 let path = UIBezierPath(ovalIn: rect) // 設置路徑的描邊寬度 path.lineWidth = 1 // 設置這個路徑的填充顏色和描邊顏色 UIColor.orange.setFill() UIColor.yellow.setStroke() // 填充這個路徑,描邊這個路徑 path.stroke() path.fill() } }
ViewController
中新建 BallView
對象,並添加到 view
的子 views
中注意: 新建的任何 UIView
默認狀況下背景是不透明的,你須要單獨設置這個屬性值來實現背景透明 isOpaque: Bool
框架
class AnimationDymanicVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 在 frame 中新建一個 BallView: CGRect 能夠有多種實現方法,具體看 API let ballView = BallView(frame: CGRect(origin: view.center, size: CGSize(width: 60, height: 60))) ballView.isOpaque = false // 沒有設置這條的時候顯示是圖1那樣,設置之後是圖2那樣 view.addSubview(ballView) } }