What are your feelings

  • Happy
  • Normal
  • Sad

苹果SwiftUI用法

SwiftUI 是 Apple 推出的声明式框架,用于构建 iOS、macOS、watchOS 和 tvOS 应用的用户界面。通过简单、直观的语法,开发者可以构建富有表现力和交互性的界面。以下是一些常见的 SwiftUI 基础用法:

1. 创建视图(Views)

Text

Text 用于显示文本,可以自定义字体、颜色等样式。

Text("Hello, SwiftUI!")
   .font(.title)
   .foregroundColor(.blue)
   .padding()

Image

Image 用于显示图片,可以是系统图标或者自定义图片。

Image(systemName: "star.fill")
   .imageScale(.large)
   .foregroundColor(.yellow)

Image("myImage")  // 本地图片
   .resizable()
   .scaledToFit()
   .frame(width: 100, height: 100)

Button

Button 用于创建按钮,支持自定义样式和点击事件。

Button(action: {
   print("Button tapped")
}) {
   Text("Tap me")
       .padding()
       .background(Color.blue)
       .foregroundColor(.white)
       .cornerRadius(10)
}

TextField

TextField 用于获取用户输入。

@State private var username = ""

TextField("Enter username", text: $username)
   .padding()
   .background(Color.gray.opacity(0.1), in: RoundedRectangle(cornerRadius: 10))

Toggle

Toggle 用于创建开关按钮,通常用于布尔值的选择。

@State private var isOn = false

Toggle("Enable feature", isOn: $isOn)
   .padding()

Slider

Slider 用于创建滑动条,可以绑定一个数值。

@State private var value = 0.5

Slider(value: $value, in: 0...1)
   .padding()

DatePicker

DatePicker 用于选择日期和时间。

@State private var selectedDate = Date()

DatePicker("Select Date", selection: $selectedDate, displayedComponents: .date)
   .padding()

2. 布局容器(Containers)

VStack

VStack 用于垂直堆叠子视图。

VStack {
   Text("Hello")
   Text("World")
}

HStack

HStack 用于水平排列子视图。

HStack {
   Text("Left")
   Spacer()
   Text("Right")
}

ZStack

ZStack 用于将视图堆叠在一起,通常用于层叠效果。

ZStack {
   Color.blue
   Text("On top of blue background")
       .foregroundColor(.white)
}

Grid (LazyVGrid 和 LazyHGrid)

用于创建网格布局,支持动态的布局。

let columns = [GridItem(.flexible()), GridItem(.flexible())]

LazyVGrid(columns: columns) {
   ForEach(0..<10) { item in
       Text("Item (item)")
           .padding()
           .background(Color.green)
   }
}

List

List 用于显示可滚动的列表,通常与数据源结合使用。

List(messages, id: .self) { message in
   Text(message)
}

ScrollView

ScrollView 用于创建滚动视图。

ScrollView {
   VStack {
       ForEach(0..<50) { item in
           Text("Item (item)")
               .padding()
       }
   }
}

3. 布局控制(Modifiers)

Padding

padding 用于为视图添加内边距。

Text("Hello, SwiftUI!")
   .padding()

Background

background 用于设置视图的背景。

Text("Hello, World!")
   .padding()
   .background(Color.blue)

ForegroundColor

foregroundColor 用于设置文本或图形的前景色。

Text("Hello, SwiftUI!")
   .foregroundColor(.blue)

CornerRadius

cornerRadius 用于设置视图的圆角。

Text("Rounded Button")
   .padding()
   .background(Color.blue)
   .foregroundColor(.white)
   .cornerRadius(10)

Frame

frame 用于设置视图的大小。

Text("Fixed Size")
   .frame(width: 200, height: 50)
   .background(Color.green)

Shadow

shadow 用于为视图添加阴影效果。

Text("Shadowed Text")
   .padding()
   .background(Color.yellow)
   .shadow(radius: 5)

Opacity

opacity 用于调整视图的透明度。

Text("Faded Text")
   .opacity(0.5)

4. 导航与路由

NavigationView 是一个容器,用于导航和显示新的视图。

NavigationView {
   List(messages, id: .self) { message in
       NavigationLink(destination: Text(message)) {
           Text(message)
       }
   }
   .navigationBarTitle("Messages")
}

5. 状态管理(State Management)

@State

@State 用于在视图内部管理状态。

@State private var isOn = false

Toggle("Enable feature", isOn: $isOn)

@Binding

@Binding 用于在父子视图之间传递数据。

struct ParentView: View {
   @State private var isOn = false

   var body: some View {
       ChildView(isOn: $isOn)
   }
}

struct ChildView: View {
   @Binding var isOn: Bool

   var body: some View {
       Toggle("Enable feature", isOn: $isOn)
   }
}

@ObservedObject 和 @StateObject

@ObservedObject 用于观察一个 ObservableObject@StateObject 用于在视图中创建和管理一个对象。

class UserData: ObservableObject {
   @Published var name = "John"
}

struct ContentView: View {
   @StateObject var userData = UserData()

   var body: some View {
       Text(userData.name)
   }
}

6. 手势识别

TapGesture

用于检测点击手势。

Text("Tap me")
   .onTapGesture {
       print("Text tapped!")
   }

DragGesture

用于检测拖动手势。

Text("Drag me")
   .gesture(DragGesture()
       .onChanged { value in
           print("Dragging at (value.location)")
       })

7. 动画(Animations)

withAnimation

withAnimation 用于包裹视图的变化,使其具有动画效果。

@State private var isVisible = true

Button("Toggle Visibility") {
   withAnimation {
       isVisible.toggle()
   }
}

if isVisible {
   Text("Hello, SwiftUI!")
       .transition(.slide)
}

动画修饰符

animation 用于给视图添加动画效果。

 

@State private var scale: CGFloat = 1.0

Text("Animated Text")
   .scaleEffect(scale)
   .onTapGesture {
       withAnimation {
           scale = (scale == 1.0) ? 2.0 : 1.0
       }
   }
索引