前言:推荐使用 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) } }