Saya telah menempatkan gambar (UIImageView) di bilah navigasi. Sekarang saya ingin mendeteksi acara sentuh dan ingin menangani acara tersebut. Bisakah Anda memberi tahu saya bagaimana saya bisa melakukan itu?
Terima kasih.
ios
iphone
uiimageview
uitouch
ebaccount
sumber
sumber
Jawaban:
Secara praktis, jangan lakukan itu.
Sebagai gantinya, tambahkan tombol dengan gaya Kustom (tanpa grafik tombol kecuali Anda menentukan gambar) di UIImageView. Kemudian lampirkan metode apa pun yang ingin Anda panggil ke sana.
Anda dapat menggunakan teknik itu untuk banyak kasus di mana Anda benar-benar ingin beberapa area layar berfungsi sebagai tombol alih-alih mengotak-atik barang-barang Touch.
sumber
A
UIImageView
diturunkan dari aUIView
yang diturunkanUIResponder
sehingga siap untuk menangani kejadian sentuh. Anda akan ingin memberikantouchesBegan
,touchesMoved
dantouchesEnded
metode dan mereka akan dipanggil jika pengguna mengetuk gambar. Jika yang Anda inginkan hanyalah acara ketuk, lebih mudah menggunakan tombol khusus dengan gambar disetel sebagai gambar tombol. Tetapi jika Anda ingin kontrol yang lebih baik atas ketukan, gerakan, dll. Ini adalah cara yang tepat.Anda juga ingin melihat beberapa hal lagi:
Timpa
canBecomeFirstResponder
dan kembali YA untuk menunjukkan bahwa tampilan dapat menjadi fokus peristiwa sentuh (standarnya adalah TIDAK).Setel
userInteractionEnabled
properti ke YA. Default untukUIViews
adalah YA, tetapi untukUIImageViews
TIDAK jadi Anda harus menyalakannya secara eksplisit.Jika Anda ingin menanggapi peristiwa multi-sentuh (misalnya mencubit, memperbesar, dll.), Anda harus menyetel
multipleTouchEnabled
ke YA.sumber
userInteractionEnabled
ke YA pada tampilan orang tua saya. Lihat stackoverflow.com/questions/5887305/…Untuk menambahkan peristiwa sentuh ke UIImageView, gunakan yang berikut ini di .m Anda
semoga membantu.
sumber
Anda juga dapat menambahkan UIGestureRecognizer. Ini tidak mengharuskan Anda untuk menambahkan elemen tambahan dalam hierarki tampilan Anda, tetapi tetap memberi Anda semua kode yang ditulis dengan baik untuk menangani kejadian sentuh dengan antarmuka yang cukup sederhana:
sumber
Saya telah berada di utas yang berbeda dalam beberapa jam terakhir mencoba menemukan solusi untuk masalah saya, tetapi tidak berhasil. Saya melihat banyak pengembang berbagi masalah ini, dan saya pikir orang-orang di sini tahu tentang ini. Saya memiliki banyak gambar di dalam
UIScrollView
, mencoba untuk mendapatkan peristiwa tap di dalamnya.tidak mendapatkan acara apa pun dari
UIImangeView
, tetapi saya mendapatkan acara dari serupaUILable
dengan parameter yang sangat mirip yang saya tetapkan untuk itu. di bawah IOS 5.1.Saya telah melakukan hal berikut:
UIImageView
.UIImageView
, tidak membantu apapun.Melampirkan beberapa kode di bawah ini, dalam kode ini saya menginisialisasi a
UIImageView
danUILabel
, label berfungsi dengan baik dalam hal peristiwa pengaktifan. Saya mencoba menyembunyikan kode yang tidak relevan. Terima kasih teman-teman, IlanDan metode yang menangani acara tersebut:
Seperti yang dikatakan, keran label diterima.
sumber
Alih-alih membuat UIImageView yang bisa disentuh lalu menempatkannya di navbar, Anda sebaiknya membuat UIBarButtonItem, yang Anda buat dari UIImageView.
Pertama buat tampilan gambar:
Kemudian buat item barbutton dari tampilan gambar Anda:
Kemudian tambahkan item tombol bar ke bar navigasi Anda:
Ingatlah bahwa kode ini masuk ke pengontrol tampilan yang ada di dalam larik pengontrol tampilan pengontrol navigasi. Jadi pada dasarnya, "item tombol bilah yang tampak seperti gambar yang dapat disentuh" ini hanya akan muncul di bilah navigasi saat pengontrol tampilan ini saat ditampilkan. Saat Anda menekan pengontrol tampilan lain, item tombol bilah navigasi ini akan hilang ~
sumber
Apa yang mungkin ingin Anda lakukan adalah mengganti
touchesBegan:withEvent:
metodeUIView
(atau subclass) yang berisiUIImageView
subview Anda .Dalam metode ini, uji apakah ada
UITouch
sentuhan yang berada di dalam batasUIImageView
instance (katakanlah disebutimageView
).Artinya, apakah
CGPoint
elemen tersebut[touch locationInView]
bersinggungan denganCGRect
elemen[imageView bounds]
? Perhatikan fungsiCGRectContainsPoint
untuk menjalankan pengujian ini.sumber
Pertama Anda harus menempatkan UIButton lalu Anda dapat menambahkan gambar latar belakang untuk tombol ini atau Anda perlu menempatkan UIImageView di atas tombol.
atau
Anda bisa menambahkan isyarat ketuk ke UIImageView sehingga mendapatkan tindakan klik saat mengetuk UIImageView.
sumber
Bagi Anda yang mencari solusi Swift 4 untuk jawaban ini. Anda dapat menggunakan berikut ini untuk mendeteksi kejadian sentuh di UIImageView.
Anda kemudian perlu menentukan pemilih Anda sebagai berikut:
sumber
Tambahkan gestur pada view tersebut. Tambahkan image ke view tersebut maka gesture tersebut akan mendeteksi gesture pada image juga. Bisakah Anda coba dengan metode delegate event sentuh maka dalam hal itu juga mungkin terdeteksi. Terima kasih
sumber