Implementasi Motion Shake dalam aplikasi iOS

Cara menggunakan dan mengimplementasikan motion shake sebagai salah satu input data dalam aplikasi iOS

Auriga Aristo
Dipantry
3 min readDec 26, 2020

--

Photo by Fabian Albert on Unsplash

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 dari touches): tidak ada subtype.
  • motionShake (anak dari motion): event yang terkait dengan getaran device.
  • remoteControlPlay, remoteControlPause, remoteControlStop, remoteControlTogglePlayPause, remoteControlNextTrack, remoteControlPreviousTrack, remoteControlBeginSeekingBackward, remoteControlEndSeekingBackward, remoteControlBeginSeekingForward, remoteControlEndSeekingForward (anak dari remoteControl): 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…

--

--

Auriga Aristo
Dipantry

4+ years in Backend Developer | PHP, Java/Kotlin, MySQL, Golang | New story every week