Implementasi Motion Shake dalam aplikasi iOS
Cara menggunakan dan mengimplementasikan motion shake sebagai salah satu input data dalam aplikasi iOS
Pada sebuah sistem, selalu terdapat input, proses, dan output. Bentuk inputan ada bermacam-macam, mulai dari sentuhan, cahaya, getaran, perubahan kimia, dan lain-lain. Setiap data yang dimasukkan akan diproses oleh sebuah sistem, lalu mengeluarkan hasil yang bisa berupa tampilan, suara, media cetak dan sebagainya.
Kali ini, saya akan membahas tentang penerapan motion shake sebagai media input pada sebuah aplikasi iOS. Penggunaan sentuhan dengan tombol mungkin sudah biasa sehingga kita coba untuk membuat satu hal yang cukup unik. Saya akan menjelaskan penggunaan fitur ini sebagai inputan aplikasi dan mengeluarkan hasilnya ke tampilan. Berikut adalah gambaran sekilas tentang aplikasi yang akan dibuat.
Gambar di sebelah kiri adalah tampilan awal aplikasi. Angka “0” di tengah merupakan jumlah getaran yang terdeteksi. Setiap kali aplikasi digoyang maka angka akan bertambah. Bar button di sebelah kanan atas merupakan tombol reset untuk kembali ke angka 0.
NOTE: Karena inputan menggunakan gerakan, maka sebaiknya kamu menjalakan project di device bukan dari simulator.
UIEvent
Setiap interaksi yang terjadi pada sebuah aplikasi ditangani oleh UIEvent
. UIEvent mampu menangani interaksi sentuhan, gerakan, dan remote-control, walaupun interaksi yang seringkali terjadi adalah sentuhan. UIEvent mengenal beberapa tipe dan sub-tipe. Sub-tipe merupakan pecahan dari tipe supaya lebih spesifik dalam penggunaannya.
UIEvent.EventType
touches
: mengatur sentuhan yang terjadi pada layar.motion
: mengatur gerakan yang terjadi pada device, seperti menggoyang device.remoteControl
: mengatur setiap inputan yang terjadi dari luar device, seperti memencet tombol dari headset.presses
: mengatur setiap pencetan dari tombol fisik.
UIEvent.EventSubType
none
(anak daritouches
): tidak ada subtype.motionShake
(anak darimotion
): event yang terkait dengan getaran device.remoteControlPlay
,remoteControlPause
,remoteControlStop
,remoteControlTogglePlayPause
,remoteControlNextTrack
,remoteControlPreviousTrack
,remoteControlBeginSeekingBackward
,remoteControlEndSeekingBackward
,remoteControlBeginSeekingForward
,remoteControlEndSeekingForward
(anak dariremoteControl
): event untuk mengatur audio dan video.
Pada contoh project di atas, kita akan menggunakan EventType.motion
atau EventSubType.motionShake
.
UIResponder
Untuk setiap event yang terjadi, class yang menangani setiap interaksi merupakan UIResponder
. Fungsi dalam UIResponder ada berbagai macam, tergantung pada tipe event yang dipilih, selengkapnya klik di sini. Pada bagian ini, saya akan menjelaskan responder khusus untuk penanganan interaksi motion shake saja.
// Fungsi yang menangani saat interaksi dimulai
func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?)// Fungsi yang menangani saat interaksi selesai
func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?)// Fungsi yang mengangai saat interaksi dibatalkan
func motionCancelled(_ motion: UIEvent.EventSubtype, with event: UIEvent?)
Implementasi dalam project
Pada contoh aplikasi ini, penerapan motion shake sebenarnya mudah. Kalian hanya perlu memasukkan fungsi di atas (yang diperlukan) ke dalam controller yang membutuhkan input motion shake. Kamu bisa menggunakan motionBegan
atau motionEnded
untuk melakukan perhitungannya.
override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
if (motion == UIEvent.EventSubtype.motionShake){
count += 1
reloadText()
}
}
Namun, motion shake ini memiliki kekurangan dalam implementasiannya dalam aplikasi ini, yaitu tidak bisa menghitung jumlah getaran yang terjadi karena motionBegan
hanya mendeteksi ketika gerakan dimulai sedangkan motionEnded
hanya mendeteksi ketika gerakan selesai.
Jika kamu ingin mengimplementasikan motion untuk menghitung jumlah gerakan yang biasa digunakan untuk menghitung jumlah langkah kaki berdasarkan gerakan tangan, saya menyarankan kalian untuk menggunakan Core Motion
dengan fitur pedometer.
Kesimpulan
Dalam pengembangan aplikasi, input dari pengguna tidak selalu berbentuk sentuhan, melainkan kamu dapat mengimplementasikan cara lain. Semua interaksi yang terdeteksi akan ditangani oleh UIEvent
dan UIResponder
. Penerapannya juga cukup mudah karena cukup memanggil fungsinya saja. Motion shake merupakan penerapan deteksi motion yang simple dibandingkan menggunakan framework rumit seperti Core Motion.
Kode project selengkapnya berdasarkan gambar di atas, klik di sini.
Selamat mencoba…