30 Days of SwiftUI - Day 13: Building Blocks & Pop-Ups: Mastering Layouts, Visuals, and User Interaction in SwiftUI


Hey Swifties! Welcome back to my 30-day SwiftUI adventure. Today, we're diving deeper into the art of crafting visually appealing and interactive interfaces. We'll be stacking, coloring, and alerting our way to SwiftUI mastery.

Laying the Foundation: Stacks – Your UI's Architects

SwiftUI's stacks ( VStack, HStack, and ZStack ) are the backbone of layout design. They allow us to arrange views vertically, horizontally, or layered on top of each other.

Example: A Simple Profile Card

import SwiftUI

struct ProfileCard: View {
    var body: some View {
        VStack {
            Image(systemName: "person.circle.fill")
                .resizable()
                .scaledToFit()
                .frame(width: 100, height: 100)
                .foregroundColor(.blue)

            Text("Swift Learner")
                .font(.title)

            Text("Day 13 Progress")
                .font(.subheadline)
        }
        .padding()
        .background(Color.gray.opacity(0.2))
        .cornerRadius(10)
    }
}

struct ProfileCard_Previews: PreviewProvider {
    static var previews: some View {
        ProfileCard()
    }
}

Visual Representation:

  • VStack: Arranges the image, title, and subtitle vertically.
  • padding(): Adds space around the stack's content.
  • background() & cornerRadius(): Styles the card.

Colors, Frames, and Gradients

Let's add some visual flair! SwiftUI provides powerful tools for color manipulation and styling.

Example: Gradient Buttons


import SwiftUI

struct GradientButton: View {
    var body: some View {
        Button(action: {
            print("Button Tapped!")
        }) {
            Text("Tap Me")
                .padding()
                .foregroundColor(.white)
                .background(
                    LinearGradient(gradient: Gradient(colors: [.blue, .purple]), startPoint: .leading, endPoint: .trailing)
                )
                .cornerRadius(10)
        }
    }
}

struct GradientButton_Previews: PreviewProvider {
    static var previews: some View {
        GradientButton()
    }
}

Visual Representation:

  • LinearGradient: Creates a smooth color transition.
  • foregroundColor(): Sets the text color.
  • cornerRadius(): Rounds the button's corners.

Action Stations: Buttons and Images

Buttons are the gateways to user interaction, and images bring your UI to life.

Example: Image Button

import SwiftUI

struct ImageButton: View {
    var body: some View {
        Button(action: {
            print("Image Button Tapped!")
        }) {
            Image(systemName: "heart.fill")
                .resizable()
                .scaledToFit()
                .frame(width: 50, height: 50)
                .foregroundColor(.red)
        }
    }
}

struct ImageButton_Previews: PreviewProvider {
    static var previews: some View {
        ImageButton()
    }
}

Visual Representation:

  • Image(systemName:): Uses SF Symbols.
  • resizable() & scaledToFit(): Resizes the image proportionally.
  • frame(): Sets the image's dimensions.

Alert! Alert! Showing Alert Messages

Alerts are perfect for displaying important information or prompting user actions.

Example: Simple Alert

import SwiftUI

struct AlertDemo: View {
    @State private var showAlert = false

    var body: some View {
        Button("Show Alert") {
            showAlert = true
        }
        .alert(isPresented: $showAlert) {
            Alert(title: Text("Important Message"), message: Text("This is a sample alert."), dismissButton: .default(Text("OK")))
        }
    }
}

struct AlertDemo_Previews: PreviewProvider {
    static var previews: some View {
        AlertDemo()
    }
}
  • @State private var showAlert: Manages the alert's visibility.
  • .alert(isPresented:): Attaches the alert to the button.

Button Mania: Stacking Up Buttons

Let's combine stacks and buttons for more complex layouts.

Example: A Button Grid

import SwiftUI

struct ButtonGrid: View {
    var body: some View {
        VStack {
            HStack {
                Button("1") { }
                Button("2") { }
                Button("3") { }
            }
            HStack {
                Button("4") { }
                Button("5") { }
                Button("6") { }
            }
        }
    }
}

struct ButtonGrid_Previews: PreviewProvider {
    static var previews: some View {
        ButtonGrid()
    }
}

Visual Representation:

[1] [2] [3]
[4] [5] [6]
  • Nested HStacks inside a VStack create a grid layout.

🔥 Conclusion

  • Stacks are essential for organizing your views.
  • Colors and gradients add visual appeal.
  • Buttons and images enable user interaction.
  • Alerts provide a way to display important messages.

Keep practicing, and you'll be building stunning SwiftUI interfaces in no time! Happy coding!


Follow me on Linkedin: igatitech 🚀🚀🚀

Comments

Popular posts from this blog

30 Days of SwiftUI — Day 1: Getting Started with SwiftUI

30 Days of SwiftUI Learning Journey: From Zero to Hero!

30 Days of SwiftUI - Day 11: Building Interactive SwiftUI Apps