Saya punya UIImageView
, yang saya inginkan untuk dapat mengubah ukuran dan memutar dll.
Bisakah UIGestureRecognizer
ditambahkan ke UIImageView
?
Saya ingin menambahkan rotate dan pinch recognition ke UIImageView
yang akan dibuat saat runtime.
Bagaimana cara menambahkan pengenal ini?
userInteractionEnabled
masih harus disetel ke YA / benar dalam Xcode 8 Objective-C / SwiftYa, UIGestureRecognizer dapat ditambahkan ke UIImageView. Seperti yang dinyatakan dalam jawaban lain, sangat penting untuk diingat untuk mengaktifkan interaksi pengguna pada tampilan gambar dengan mengatur
userInteractionEnabled
propertinyaYES
. UIImageView mewarisi dari UIView, yang properti interaksi penggunanya diaturYES
secara default, namun, properti interaksi pengguna UIImageView diaturNO
secara default.Dari dokumen UIImageView:
Bagaimanapun, pada sebagian besar jawabannya. Berikut adalah contoh cara membuat a
UIImageView
denganUIPinchGestureRecognizer
, aUIRotationGestureRecognizer
, dan aUIPanGestureRecognizer
.Pertama, di
viewDidLoad
, atau metode lain pilihan Anda, buat tampilan gambar, berikan gambar, bingkai, dan aktifkan interaksi penggunanya. Kemudian buat tiga gerakan sebagai berikut. Pastikan untuk menggunakan properti delegasi mereka (kemungkinan besar diatur sendiri). Ini akan diperlukan untuk menggunakan beberapa gerakan sekaligus.Berikut adalah tiga metode yang akan dipanggil ketika gerakan pada tampilan Anda terdeteksi. Di dalam mereka, kita akan memeriksa keadaan saat ini dari gerakan, dan jika itu di salah satu mulai atau diubah
UIGestureRecognizerState
kita akan membaca skala gesture / rotasi / terjemahan properti, menerapkan data ke transformasi affine, menerapkan transformasi affine ke gambar lihat, lalu atur ulang skala gerakan / rotasi / terjemahan.Terakhir dan yang sangat penting, Anda harus menggunakan metode UIGestureRecognizerDelegate
gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer
untuk memungkinkan gerakan bekerja pada saat yang sama. Jika ketiga gerakan ini adalah satu-satunya gerakan yang ditugaskan kelas ini sebagai delegasi mereka, maka Anda dapat kembaliYES
seperti yang ditunjukkan di bawah ini. Namun, jika Anda memiliki gerakan tambahan yang ditugaskan kelas ini sebagai delegasi mereka, Anda mungkin perlu menambahkan logika ke metode ini untuk menentukan gerakan yang mana sebelum mengizinkan mereka semua bekerja sama.Jangan lupa untuk memastikan bahwa kelas Anda sesuai dengan protokol UIGestureRecognizerDelegate . Untuk melakukannya, pastikan antarmuka Anda terlihat seperti ini:
Jika Anda lebih suka bermain sendiri dengan kode dalam proyek sampel yang berfungsi, proyek sampel yang saya buat berisi kode ini dapat ditemukan di sini.
sumber
Cepat 4.2
dan ketika disadap:
sumber
Solusi Swift 2.0
Anda membuat pengenal isyarat ketukan, jepit, atau geser di manor yang sama. Di bawah ini saya akan memandu Anda melalui 4 langkah untuk mengaktifkan dan menjalankan pengenal Anda.
4 Langkah
1.) Mewarisi dari
UIGestureRecognizerDelegate
dengan menambahkannya ke tanda tangan kelas Anda.2.) Kontrol seret dari gambar Anda ke viewController Anda untuk membuat IBOutlet:
3.) Di viewDidLoad Anda, tambahkan kode berikut:
4.) Buat fungsi yang akan dipanggil ketika pengenal isyarat Anda diketuk. (Anda dapat mengecualikan
= nil
jika Anda memilih).Kode akhir Anda akan terlihat seperti ini:
sumber
Saya baru saja melakukan ini dengan swift4 dengan menambahkan 3 gerakan bersamaan dalam tampilan tunggal
Di sini kode sampel saya
Setiap pertanyaan, cukup ketik untuk berkomentar. Terima kasih
sumber
SWIFT 3 Contoh
Tidak ada delegasi penerima gesture atau implementasi lainnya jika diperlukan.
sumber
Anda juga dapat menyeret pengenal gerakan ketukan ke tampilan gambar di
Storyboard
. Kemudian buat tindakan denganctrl + drag
menggunakan kode.sumber
Untuk pencinta Blok Anda dapat menggunakan ALActionBlocks untuk menambahkan aksi gerakan di blok
sumber