SwiftUI imo-ishoralar


ULASHISH

SwiftUI imo-ishoralar (gestures)

Bosish, sudrash va boshqa o‘zaro ta’sirlarni .gesture va o‘rnatilgan imo-ishora aniqlagichlari (gesture recognizers) yordamida qayta ishlang.


Bosish va uzoq bosish

Bosish va uzoq bosishlarni .onTapGesture va .onLongPressGesture bilan qayta ishlang.


Sintaksis:

  • .onTapGesture { ... }
  • .onLongPressGesture(minimumDuration:perform:)

Misol

import SwiftUI

struct TapLongPressDemo: View {
  @State private var on = false
  @State private var pressed = false
  var body: some View {
    Circle()
      .fill(on ? .green : .gray)
      .frame(width: 80, height: 80)
      .scaleEffect(pressed ? 0.9 : 1)
      .onTapGesture { on.toggle() }
      .onLongPressGesture(minimumDuration: 0.5) { pressed.toggle() }
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { TapLongPressDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Ushbu misol bosilganda rangni almashtiradi va uzoq bosilganda doirani qisqa muddatga kattalashtiradi.


DragGesture

Offset’ni yangilash uchun DragGesture biriktirib, barmoq harakatini kuzating.

Sintaksis: .gesture(DragGesture().onChanged { value in ... }.onEnded { ... })

Misol

import SwiftUI

struct DragDemo: View {
  @State private var offset: CGSize = .zero
  var body: some View {
    Text("Drag me")
      .padding(12)
      .background(.blue.opacity(0.1))
      .cornerRadius(8)
      .offset(offset)
      .gesture(
        DragGesture()
          .onChanged { value in offset = value.translation }
          .onEnded { _ in withAnimation(.spring()) { offset = .zero } }
      )
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { DragDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Ushbu misol sudrash paytida barmoqqa ergashadi va qo‘yib yuborilganda prujina kabi boshlang‘ich joyiga qaytadi.



Imo-ishoralarni birlashtirish

Bir nechta imo-ishorani muvofiqlashtirish uchun .simultaneousGesture yoki .highPriorityGesture dan foydalaning.

Sintaksis:

  • .simultaneousGesture(TapGesture())
  • .highPriorityGesture(DragGesture())

Misol

import SwiftUI

struct CombineGesturesDemo: View {
  @State private var tapped = 0
  @State private var dragged = false
  var body: some View {
    Rectangle()
      .fill(dragged ? .orange : .purple)
      .frame(height: 120)
      .overlay(Text("taps: \(tapped)"))
      .simultaneousGesture(TapGesture().onEnded { tapped += 1 })
      .highPriorityGesture(DragGesture().onChanged { _ in dragged = true }.onEnded { _ in dragged = false })
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { CombineGesturesDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Ushbu misol bosishlarni sanaydi va shu bilan birga sudrashga ham javob beradi — bu imo-ishoralar kompozitsiyasini namoyish etadi.

Maslahat: O‘zaro ta’sirlarni muvofiqlashtirish uchun imo-ishoralarni .simultaneousGesture yoki .highPriorityGesture bilan birlashtiring.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!