Saya ingin melihat ada kendaraan yang berkeliling yang juga bisa diseret dan dijatuhkan oleh pengguna. Menurut Anda, apa strategi skala besar terbaik untuk melakukan ini? Apakah yang terbaik adalah mendapatkan acara sentuhan dari tampilan yang mewakili kendaraan, atau dari tampilan yang lebih besar? Apakah ada paradigma sederhana yang Anda gunakan untuk seret dan lepas yang Anda puas? Apa kekurangan dari strategi yang berbeda?
93
Jawaban:
Asumsikan Anda memiliki
UIView
pemandangan dengan gambar latar dan banyak lagivehicles
, Anda dapat mendefinisikan setiap kendaraan baru sebagaiUIButton
(UIImageView mungkin juga akan berfungsi):Kemudian Anda boleh memindahkan kendaraan kemanapun Anda mau, dengan merespon
UIControlEventTouchDragInside
kejadian tersebut, misal:Jauh lebih mudah bagi setiap kendaraan untuk menangani tarikannya sendiri, dibandingkan mengelola pemandangan secara keseluruhan.
sumber
Selain jawaban ohho, saya telah mencoba implementasi serupa, tetapi tanpa masalah drag "fast" dan centering to drag.
Inisialisasi tombol adalah ...
dan penerapan metode:
Saya tidak mengatakan, bahwa ini adalah solusi yang tepat untuk jawabannya. Namun demikian saya menemukan ini solusi termudah untuk menyeret.
sumber
Saya punya kasus di mana saya ingin menyeret / melepaskan tampilan antara beberapa tampilan lainnya. Dalam hal ini saya menemukan solusi terbaik untuk melacak kejadian pan dalam tampilan super yang berisi semua zona lepas dan semua objek pelana tarik. Alasan utama untuk TIDAK menambahkan event listener ke tampilan yang diseret sebenarnya adalah karena saya kehilangan event pan yang sedang berlangsung segera setelah saya mengubah superview untuk tampilan yang diseret.
Sebagai gantinya saya menerapkan solusi drag drop yang agak umum yang dapat digunakan pada satu atau beberapa zona drop.
Saya telah membuat contoh sederhana yang dapat dilihat di sini: Seret tampilan drop antara beberapa tampilan lainnya
Jika Anda memutuskan untuk menggunakan cara lain, coba gunakan uicontrol sebagai ganti uibutton. Mereka mendeklarasikan metode addTarget dan jauh lebih mudah untuk diperluas - karenanya memberikan status dan perilaku khusus.
sumber
Saya benar-benar akan melacak menyeret pada tampilan kendaraan itu sendiri, daripada tampilan besar - kecuali ada alasan khusus untuk tidak melakukannya.
Dalam satu kasus di mana saya mengizinkan pengguna untuk menempatkan item dengan menyeretnya di layar. Dalam hal ini saya bereksperimen dengan memiliki tampilan atas dan tampilan anak diseret. Saya menemukan kode itu lebih bersih jika Anda menambahkan beberapa tampilan "yang dapat diseret" ke UIView dan menangani bagaimana mereka dapat diseret. Saya menggunakan panggilan balik sederhana ke induk UIView untuk memeriksa apakah lokasi baru cocok atau tidak - jadi saya bisa menunjukkan dengan animasi.
Memiliki trek tampilan atas yang menyeret saya kira sama baiknya, tetapi itu membuatnya sedikit lebih berantakan jika Anda ingin menambahkan tampilan yang tidak dapat diseret yang masih berinteraksi dengan pengguna, seperti tombol.
sumber
sumber
jawaban ohho bekerja dengan baik untuk saya. Jika Anda membutuhkan versi cepat 2.x:
sumber
Berikut cara terbaik untuk melakukan seret dan lepas pada iOS 11:
https://developer.apple.com/documentation/uikit/drag_and_drop/adopting_drag_and_drop_in_a_custom_view
sumber
Untuk Swift 4 Cara mudah dan termudah. 😛
Langkah 1: Hubungkan Tombol Anda Dari Storyboard Untuk Melihat Controller. Dan Setel semua Batasan Tata Letak Otomatis Dasar
Langkah 2: Tambah Pan Gesture untuk tombol Anda Dalam viewDidLoad ()
Langkah 3:
Tambahkan panGestureHandler
Dan Sekarang Aksi Tombol Anda
Tambahkan Lihat Hasilnya ☝️
sumber