SwiftUI series 11: Creating a Thumbnail Maker App in SwiftUI: Basic Text Floating Above Image App

In this tutorial, we'll build a simple but powerful Thumbnail Maker app using SwiftUI. This app allows users to select an image from their photo library and add custom text overlays to create engaging thumbnails.

Prerequisites

  • Xcode 15 or later
  • Basic knowledge of SwiftUI
  • iOS 17 or later

Step-by-Step Guide

1. Setting Up the Project

First, create a new SwiftUI project in Xcode and name it "ThumbnailMaker". The main functionality will be in ContentView.swift.

2. Import Required Frameworks

import SwiftUI
import PhotosUI

3. Creating the State Variables

@State private var selectedImage: UIImage?
@State private var imageSelection: PhotosPickerItem?
@State private var overlayText: String = ""

These state variables will:

  • Store the selected image
  • Handle the PhotosPicker selection
  • Manage the overlay text input

4. Building the User Interface

var body: some View {
    VStack(spacing: 20) {
        // Image picker button
        PhotosPicker(selection: $imageSelection,
                    matching: .images) {
            Text("Select Image")
                .padding()
                .background(Color.blue)
                .foregroundColor(.white)
                .cornerRadius(8)
        }

        // Image display with text overlay
        if let selectedImage {
            ZStack {
                Image(uiImage: selectedImage)
                    .resizable()
                    .scaledToFit()
                    .frame(maxHeight: 300)

                Text(overlayText)
                    .font(.system(size: 32, weight: .bold))
                    .foregroundColor(.white)
                    .shadow(color: .black, radius: 3, x: 1, y: 1)
                    .multilineTextAlignment(.center)
                    .padding()
            }
        }

        // Text input field
        TextField("Enter overlay text", text: $overlayText)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .padding(.horizontal)
    }
    .padding()
}

5. Handling Image Selection

.onChange(of: imageSelection) { oldValue, newValue in
    Task {
        if let data = try? await newValue?.loadTransferable(type: Data.self),
           let uiImage = UIImage(data: data) {
            selectedImage = uiImage
        }
    }
}

Key Features Explained

  1. Photo Selection: Using PhotosPicker, we provide a simple way to select images from the device's photo library.

  2. Image Display: The selected image is displayed using SwiftUI's Image view, configured to maintain aspect ratio and fit within a reasonable size.

  3. Text Overlay: Users can add custom text that appears centered over the image with a professional-looking shadow effect.

  4. Responsive Layout: The app uses VStack for vertical organization and ZStack for overlaying text on the image.

Customization Options

You can enhance this basic version by:

  • Adding different text styles and colors
  • Implementing text position controls
  • Adding export functionality
  • Including filters or image adjustments

Get New Tutorials by Email

No spam. Just clear, practical breakdowns you can apply right away.

Enjoy this tutorial?

Get new practical tech tutorials in your inbox.