Bird
Raised Fist0
iOS Swiftmobile~5 mins

Canvas for drawing in iOS Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Canvas in iOS Swift development?
A Canvas is a view or area where you can draw shapes, lines, or images using code. It acts like a blank paper for your app to create drawings.
Click to reveal answer
beginner
Which class in Swift is commonly used to create a custom drawing area?
You use a <code>UIView</code> subclass and override its <code>draw(_ rect: CGRect)</code> method to perform custom drawing on the Canvas.
Click to reveal answer
intermediate
What is the role of UIBezierPath in drawing on Canvas?
UIBezierPath helps you create paths like lines, curves, and shapes that you can stroke or fill on the Canvas.
Click to reveal answer
intermediate
How do you trigger a Canvas to redraw its content?
Call setNeedsDisplay() on the Canvas view to tell iOS to call draw(_ rect: CGRect) again and update the drawing.
Click to reveal answer
intermediate
Why is it important to keep drawing code inside draw(_ rect: CGRect)?
Because iOS calls this method whenever the view needs to update. Drawing outside this method may not appear or cause performance issues.
Click to reveal answer
Which method do you override to draw on a UIView Canvas?
AviewDidLoad()
Binit()
ClayoutSubviews()
Ddraw(_ rect: CGRect)
What class helps you create shapes and lines for drawing?
AUILabel
BUIBezierPath
CUIButton
DUIImageView
How do you tell the Canvas to refresh its drawing?
AsetNeedsDisplay()
BreloadData()
Crefresh()
Dupdate()
What happens if you draw outside the draw(_ rect:) method?
ADrawing may not appear or cause issues
BThe app crashes
CDrawing always appears immediately
DThe system ignores the drawing
Which UIKit class do you subclass to create a custom Canvas?
AUIScrollView
BUITableView
CUIView
DUIViewController
Explain how to create a simple drawing Canvas in iOS Swift.
Think about the steps to show custom lines or shapes on screen.
You got /4 concepts.
    Describe why the draw(_ rect: CGRect) method is important for Canvas drawing.
    Consider how iOS manages view updates.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary method to override when drawing custom shapes on a UIView in Swift?
      easy
      A. draw(_ rect: CGRect)
      B. viewDidLoad()
      C. layoutSubviews()
      D. updateConstraints()

      Solution

      1. Step 1: Understand UIView drawing lifecycle

        Custom drawing on a UIView is done by overriding the draw(_:) method.
      2. Step 2: Identify the correct method signature

        The method draw(_ rect: CGRect) provides the area to draw and is called automatically when the view needs to render.
      3. Final Answer:

        draw(_ rect: CGRect) -> Option A
      4. Quick Check:

        Custom drawing uses draw(_:) [OK]
      Hint: Remember: draw(_:) is the canvas entry point [OK]
      Common Mistakes:
      • Confusing draw(_:) with viewDidLoad()
      • Trying to draw in layoutSubviews()
      • Using updateConstraints() for drawing
      2. Which Swift code correctly obtains the current graphics context inside draw(_:) for drawing?
      easy
      A. let context = UIView.getContext()
      B. let context = CGContext.current()
      C. let context = GraphicsContext.shared
      D. let context = UIGraphicsGetCurrentContext()

      Solution

      1. Step 1: Recall the UIKit method for graphics context

        UIGraphicsGetCurrentContext() is the correct UIKit function to get the current drawing context.
      2. Step 2: Verify method names and usage

        Other options are not valid UIKit methods or properties for getting the context.
      3. Final Answer:

        let context = UIGraphicsGetCurrentContext() -> Option D
      4. Quick Check:

        Use UIGraphicsGetCurrentContext() to get context [OK]
      Hint: Use UIGraphicsGetCurrentContext() inside draw(_:) [OK]
      Common Mistakes:
      • Using non-existent methods like CGContext.current()
      • Trying to get context outside draw(_:) method
      • Confusing UIView methods with graphics context
      3. What will be the visible result of this draw(_:) code snippet?
      override func draw(_ rect: CGRect) {
        guard let ctx = UIGraphicsGetCurrentContext() else { return }
        ctx.setFillColor(UIColor.red.cgColor)
        ctx.fill(CGRect(x: 10, y: 10, width: 100, height: 50))
      }
      medium
      A. A blue rectangle at position (10,10) sized 100x50
      B. A red rectangle at position (10,10) sized 100x50
      C. No visible shape because fill color is not set
      D. A red circle at position (10,10) sized 100x50

      Solution

      1. Step 1: Analyze fill color and shape

        The code sets fill color to red and fills a rectangle at (10,10) with width 100 and height 50.
      2. Step 2: Confirm shape and color match

        The shape is a rectangle, not a circle, and color is red, not blue.
      3. Final Answer:

        A red rectangle at position (10,10) sized 100x50 -> Option B
      4. Quick Check:

        Fill color red + fill rect = red rectangle [OK]
      Hint: Fill color sets shape color; fill draws the shape [OK]
      Common Mistakes:
      • Assuming default color is blue
      • Confusing rectangle with circle
      • Forgetting to unwrap context safely
      4. Identify the error in this draw(_:) method that prevents drawing a blue circle:
      override func draw(_ rect: CGRect) {
        let ctx = UIGraphicsGetCurrentContext()
        ctx.setFillColor(UIColor.blue.cgColor)
        ctx.fillEllipse(in: CGRect(x: 20, y: 20, width: 80, height: 80))
      }
      medium
      A. UIColor.blue.cgColor is invalid
      B. Incorrect method fillEllipse(in:) used
      C. Missing guard or forced unwrap for context
      D. CGRect coordinates are out of bounds

      Solution

      1. Step 1: Check context unwrapping

        The context is optional and not safely unwrapped, causing a compile error because ctx is optional.
      2. Step 2: Confirm method and color correctness

        fillEllipse(in:) and UIColor.blue.cgColor are correct and CGRect is valid.
      3. Final Answer:

        Missing guard or forced unwrap for context -> Option C
      4. Quick Check:

        Always unwrap context safely before drawing [OK]
      Hint: Always unwrap UIGraphicsGetCurrentContext() safely [OK]
      Common Mistakes:
      • Ignoring optional context leading to no drawing
      • Thinking fillEllipse(in:) is wrong method
      • Assuming color cgColor is invalid
      5. You want to draw a green rectangle with a black border of 5 points thickness inside draw(_:). Which code snippet correctly achieves this?
      hard
      A. ctx.setFillColor(UIColor.green.cgColor) ctx.fill(rect) ctx.setStrokeColor(UIColor.black.cgColor) ctx.setLineWidth(5) ctx.stroke(rect)
      B. ctx.setStrokeColor(UIColor.green.cgColor) ctx.stroke(rect) ctx.setFillColor(UIColor.black.cgColor) ctx.fill(rect) ctx.setLineWidth(5)
      C. ctx.setFillColor(UIColor.black.cgColor) ctx.fill(rect) ctx.setStrokeColor(UIColor.green.cgColor) ctx.setLineWidth(5) ctx.stroke(rect)
      D. ctx.setLineWidth(5) ctx.setFillColor(UIColor.green.cgColor) ctx.stroke(rect) ctx.setStrokeColor(UIColor.black.cgColor) ctx.fill(rect)

      Solution

      1. Step 1: Fill rectangle with green color

        Set fill color to green and fill the rect to paint the inside.
      2. Step 2: Draw black border with stroke

        Set stroke color to black, line width to 5, then stroke the rect to draw border.
      3. Final Answer:

        Fill green then stroke black with line width 5 -> Option A
      4. Quick Check:

        Fill first, then stroke for border [OK]
      Hint: Fill shape first, then stroke border with line width [OK]
      Common Mistakes:
      • Swapping fill and stroke colors
      • Setting line width after stroke call
      • Calling stroke before fill
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard