Swift Academy · Pelajaran

Animasi Implisit berbanding Eksplisit

Gunakan pengubah .animation() berbanding blok withAnimation {} untuk kegunaan berbeza.

Pelajaran 1 daripada 413 langkah

Animasi Implisit berbanding Eksplisit ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Dua Gaya Animasi

SwiftUI menyokong animasi tersirat, iaitu pengubah suai .animation, dan animasi eksplisit, iaitu penutupan withAnimation.

struct Demo: View {
  @State private var scale = 1.0
  var body: some View {
    Circle().scaleEffect(scale)
  }
}

Animasi Tersirat dengan .animation

Melampirkan .animation(_:value:) pada paparan akan menganimasikannya setiap kali nilai terikat berubah.

Circle()
  .scaleEffect(scale)
  .animation(.easeInOut(duration: 0.3), value: scale)

Mencetuskan Animasi Tersirat

Sebarang perubahan keadaan yang mempengaruhi paparan akan mencetuskan animasi tersirat yang ditakrifkan padanya secara automatik.

Button("Grow") {
  scale = 2.0  // .animation fires automatically
}

Animasi Eksplisit dengan withAnimation

withAnimation membungkus perubahan keadaan dan menganimasikan semua perubahan paparan yang terhasil secara serentak.

Button("Animate") {
  withAnimation(.spring()) {
    scale = 2.0
    offset = 50
  }
}

Menganimasikan Pelbagai Properti

withAnimation lebih sesuai apabila anda mahu menganimasikan beberapa perubahan keadaan secara segerak sebagai satu transaksi.

withAnimation(.easeOut(duration: 0.5)) {
  isExpanded = true
  rotation = 90
  opacity = 0.5
}

Jenis Animasi

Swift menyediakan animasi spring, easeIn, easeOut, easeInOut, linear dan lengkung pemasaan tersuai.

.spring(response: 0.4, dampingFraction: 0.6)
.easeInOut(duration: 0.3)
.linear(duration: 0.5)
.timingCurve(0.2, 0.8, 0.2, 1.0, duration: 0.4)

Melumpuhkan Animasi

Hantar .animation(.none, value:) atau bungkus perubahan dalam withAnimation(nil) untuk melumpuhkan animasi secara terpilih.

Circle()
  .scaleEffect(scale)
  .animation(.none, value: scale)  // no animation

Keutamaan Animasi

withAnimation eksplisit mengatasi pengubah suai .animation tersirat pada paparan anak.

withAnimation(.linear) {
  value = true  // linear wins over any .animation on subviews
}

Animasi Berulang

Gunakan .repeatForever atau .repeatCount untuk animasi berulang seperti kesan denyutan.

.animation(
  .easeInOut(duration: 0.8).repeatForever(autoreverses: true),
  value: pulsing
)

Kelewatan dan Kelajuan

Gabungkan animasi dengan pengubah suai .delay dan .speed pada nilai animasi.

.animation(.spring().delay(0.2).speed(1.5), value: flag)

Memilih antara Tersirat dan Eksplisit

Gunakan animasi tersirat untuk animasi satu paparan yang terikat pada satu nilai; gunakan animasi eksplisit apabila menyelaraskan beberapa properti atau paparan.

// Implicit: simple, single view
.animation(.easeIn, value: isVisible)
// Explicit: multi-property or cross-view
withAnimation { a = 1; b = 2 }

Semakan Ringkas

Pendekatan manakah yang paling sesuai untuk menyelaraskan animasi beberapa sifat keadaan secara serentak?

Ringkasan Pelajaran

Animasi tersirat (.animation(_:value:)) bertindak balas secara automatik terhadap perubahan nilai pada satu paparan. Animasi eksplisit (withAnimation {}) menyelaraskan beberapa mutasi. Gabungkan dengan .delay, .speed, dan .repeatForever untuk menghasilkan kesan yang kompleks.

Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Animasi Implisit berbanding Eksplisit” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Animasi Implisit berbanding Eksplisit”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Animasi Implisit berbanding Eksplisit”?

Gunakan pengubah .animation() berbanding blok withAnimation {} untuk kegunaan berbeza. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Animasi Implisit berbanding Eksplisit” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Animasi Implisit berbanding Eksplisit
  2. matchedGeometryEffect untuk Peralihan Hero
  3. AnimatableModifier dan Animatable Tersuai
  4. TimelineView dan Canvas untuk Lukisan Berprestasi Tinggi
← Kembali ke Swift Academy