Swift UIKit-style iPhone App Development: Adding Color and Thickness Modification Features to the Sketch App

Utilizing the UIKit framework in the process of developing an iPhone app is very common. UIKit is Apple’s user interface framework that provides various tools for drawing graphics in iOS applications. In this post, we will delve into how to add functionality for changing colors and thickness in a sketch app using Swift. This includes useful tips and techniques that can be used by everyone from beginner app developers to advanced developers.

1. Understanding the UIKit Framework

UIKit is a framework that provides the basic components for iOS apps, handling views, view controllers, text, and image processing. Using UIKit allows for easy design and configuration of user interfaces. This framework consists of the following key elements:

  • UIView: The base class for all user interface elements.
  • UIViewController: The class that manages screens.
  • UIControl: A class that can receive user touch inputs such as buttons and sliders.
  • CALayer: A hierarchical structure for managing graphic content.

2. Designing the Structure of the Sketch App

A sketch app is an application that allows users to freely draw. This app needs functionality to draw paths along with the ability to adjust the selected color and line thickness. The main components of the app are as follows:

  • Drawing Area
  • Color Selector
  • Thickness Selector

3. Setting Up the Project

Create a new iOS project in Xcode. Choose “Single View App” as the project template and set it to use the Swift language. Modify the ViewController.swift file and Main.storyboard file in the created project to build the app’s basic UI.

4. Configuring the Basic UI

Add the following UI components in Main.storyboard:

  • UIView (Drawing Area)
  • UIButton (Clear Button)
  • UISlider (Thickness Slider)
  • UIColorWell (Color Selector)

Set constraints for each UI element to ensure they display correctly regardless of screen size.

5. Implementing the Drawing Area

The Drawing Area is the space where users can draw. To implement this, create a CustomView class inheriting from UIView, and handle touch events to represent the paths drawn by users on the screen.

class CustomView: UIView {
    private var paths: [UIBezierPath] = []
    private var currentPath: UIBezierPath?
    var strokeColor: UIColor = .black
    var lineWidth: CGFloat = 1.0

    override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        guard let touch = touches.first else { return }
        let point = touch.location(in: self)
        currentPath = UIBezierPath()
        currentPath?.move(to: point)
    }

    override func touchesMoved(_ touches: Set, with event: UIEvent?) {
        guard let touch = touches.first, let path = currentPath else { return }
        let point = touch.location(in: self)
        path.addLine(to: point)
        paths.append(path)
        setNeedsDisplay()
    }

    override func draw(_ rect: CGRect) {
        for path in paths {
            strokeColor.setStroke()
            path.lineWidth = lineWidth
            path.stroke()
        }
        currentPath?.stroke()
    }

    func clear() {
        paths.removeAll()
        setNeedsDisplay()
    }
}

6. Implementing the Color Selector and Thickness Selector

To implement the color selector and thickness selector, write methods to connect with the UI elements below.

class ViewController: UIViewController {
    @IBOutlet weak var drawingArea: CustomView!
    @IBOutlet weak var thicknessSlider: UISlider!
    @IBOutlet weak var colorSelector: UIColorWell!

    override func viewDidLoad() {
        super.viewDidLoad()
        colorSelector.addTarget(self, action: #selector(colorChanged), for: .valueChanged)
        thicknessSlider.addTarget(self, action: #selector(thicknessChanged), for: .valueChanged)
    }

    @objc func colorChanged(sender: UIColorWell) {
        drawingArea.strokeColor = sender.selectedColor ?? .black
    }

    @objc func thicknessChanged(sender: UISlider) {
        drawingArea.lineWidth = CGFloat(sender.value)
    }

    @IBAction func clearDrawing(_ sender: UIButton) {
        drawingArea.clear()
    }
}

7. Testing and Improving Functionality

Test the app’s features to ensure all functions are working correctly. Users should be able to change colors and thickness, and the drawing clear function should also work correctly. Improving layouts to enhance user experience is also an important process. If necessary, user-customized messages or error handling functions can be added.

8. Finalization and Preparing for Deployment

If the app works correctly, finally click on the ‘Product’ menu in Xcode and select ‘Archive’ to package the app for deployment. The next steps will guide how to submit it to the App Store.

This concludes the process of developing a functional sketch app using Swift and UIKit. I hope it helps in your app development journey!