Mari Belajar CoreGraphics (Part 1)
override func draw(_ rect: CGRect)
Method diatas merupakan method dari UIView yang kita perlukan jika kita ingin mengimplementasi drawing code, untuk lebih jelasnya nanti bisa kita lihat dalam kode yang akan kita buat nanti.
Sebenarnya kita juga bisa menggunakan addSublayer untuk menambahkan object view pada UIView (superview), karena function draw lebih powerfull karena view akan dirender otomatis ketika view dibuat ataupun ketika view ter-invalidate, sehingga kita tidak perlu memantau perubahan bounds atau frame saat view size berubah.
The default implementation of this method does nothing. Subclasses that use technologies such as Core Graphics and UIKit to draw their view’s content should override this method and implement their drawing code there. You do not need to override this method if your view sets its content in other ways. For example, you do not need to override this method if your view just displays a background color or if your view sets its content directly using the underlying layer object.
Path Function
public func move(to point: CGPoint, transform: CGAffineTransform = .identity)
Move merupakan fuction untuk memulai suatu subpath, jika kita tidak menggunakan object path seperti ellipse, rectangle, roundedRect.
public func addArc(center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool)
public func addEllipse(in rect: CGRect, transform: CGAffineTransform = .identity)
public func addCurve(to end: CGPoint, control1: CGPoint, control2: CGPoint, transform: CGAffineTransform = .identity)
public func addLine(to point: CGPoint, transform: CGAffineTransform = .identity)
public func addLines(between points: [CGPoint], transform: CGAffineTransform = .identity)
public func addPath(_ path: CGPath, transform: CGAffineTransform = .identity)
public func addRoundedRect(in rect: CGRect, cornerWidth: CGFloat, cornerHeight: CGFloat, transform: CGAffineTransform = .identity)
public func addQuadCurve(to end: CGPoint, control: CGPoint, transform: CGAffineTransform = .identity)
public func addRect(_ rect: CGRect, transform: CGAffineTransform = .identity)
public func addRects(_ rects: [CGRect], transform: CGAffineTransform = .identity)
Implementasi
Keterangan
- Panah merah menunjukan corner radius dari object rectangel (let corner: CGFloat = 8)
- Panah Hijau menunjukan padding dari object (let padding: CGFloat = 16)
- Panah Kuning menunjukan diameter dari lingkaran (let height: CGFloat = 128)
Untuk menggambar object diatas kita hanya memerlukan 2 method dari Path Function, yaitu addRoundRect dan addElipse.