Saya mengalami masalah saat membuat blok berfungsi di Swift. Berikut adalah contoh yang berhasil (tanpa blok penyelesaian):
UIView.animateWithDuration(0.07) {
self.someButton.alpha = 1
}
atau sebagai alternatif tanpa penutupan akhir:
UIView.animateWithDuration(0.2, animations: {
self.someButton.alpha = 1
})
tetapi begitu saya mencoba menambahkan blok penyelesaian, itu tidak akan berhasil:
UIView.animateWithDuration(0.2, animations: {
self.blurBg.alpha = 1
}, completion: {
self.blurBg.hidden = true
})
Pelengkapan otomatis memberi saya completion: ((Bool) -> Void)?
tetapi tidak yakin bagaimana cara membuatnya bekerja. Juga mencoba dengan penutupan tambahan tetapi mendapatkan kesalahan yang sama:
! Could not find an overload for 'animateWithDuration that accepts the supplied arguments
Pembaruan untuk Swift 3/4:
// This is how I do regular animation blocks
UIView.animate(withDuration: 0.2) {
<#code#>
}
// Or with a completion block
UIView.animate(withDuration: 0.2, animations: {
<#code#>
}, completion: { _ in
<#code#>
})
Saya tidak menggunakan penutupan trailing untuk blok penyelesaian karena menurut saya kurang jelas, tetapi jika Anda suka maka Anda dapat melihat jawaban Trevor di bawah ini .
Jawaban:
parameter penyelesaian di animateWithDuration mengambil satu blok yang mengambil satu parameter boolean. Secara cepat, seperti di blok Obj C, Anda harus menentukan parameter yang diperlukan penutupan:
Bagian penting di sini adalah
(value: Bool) in
. Itu memberi tahu kompiler bahwa closure ini mengambil Bool berlabel 'value' dan mengembalikan void.Sebagai referensi, jika Anda ingin menulis closure yang mengembalikan bool sintaksnya
sumber
$0
for argumen pertama, hanya dengan menggunakan variabel di dalam blok, kompilator mengetahui bahwa blok Anda menerima sebuah argumen.Selesai sudah benar, penutupan harus menerima
Bool
parameter:(Bool) -> ()
. Mencobasumber
Menggarisbawahi dengan sendirinya di samping
in
kata kunci akan mengabaikan masukanCepat 2
Cepat 3, 4, 5
sumber
Ada solusi saya di atas berdasarkan jawaban yang diterima di atas. Ini memudarkan pandangan dan menyembunyikannya sekali hampir tidak terlihat.
Cepat 2
Cepat 3, 4, 5
sumber
Ini dia, ini akan dikompilasi
Cepat 2
Cepat 3, 4, 5
Alasan saya menjadikan area Bool garis bawah adalah karena Anda tidak menggunakan nilai itu, jika Anda membutuhkannya Anda dapat mengganti (_) dengan (value: Bool)
sumber
Terkadang Anda ingin memasukkan ini ke dalam variabel untuk dianimasikan dengan cara yang berbeda tergantung pada situasinya. Untuk itu yang Anda butuhkan
Atau Anda bisa menggunakan kata-kata yang sama bertele-tele:
Tetapi bagaimanapun juga, Anda harus menunjukkan
Bool
suatu tempat.sumber
SWIFT 3.x + 4.x
Saya ingin memperbarui dan menyederhanakan semuanya.
Contoh di bawah ini diterapkan di semua
view
tempat yang bersembunyi dengan lambat dan saat transparan sepenuhnya; menghapusnya sendiri dari orang tuaview
ok
variabel akan selalu kembalitrue
dengan penghentian animasi.sumber