Bagaimana iPhone dapat diatur agar bergetar sekali?
Misalnya, ketika seorang pemain kehilangan nyawa atau permainan berakhir, iPhone harus bergetar.
ios
cocoa-touch
avfoundation
vibration
sistem
sumber
sumber
Jawaban:
Dari " Tutorial iPhone: Cara yang lebih baik untuk memeriksa kemampuan perangkat iOS ":
Ada dua fungsi yang tampaknya serupa yang mengambil parameter
kSystemSoundID_Vibrate
:Pertama, tambahkan kerangka AudioToolbox
AudioToolbox.framework
ke target Anda di Build Phases.Kemudian, impor file header ini:
sumber
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(setidaknya pada beta 2)Swift 2.0+
AudioToolbox sekarang menyajikan
kSystemSoundID_Vibrate
sebagaiSystemSoundID
tipe, jadi kodenya adalah:Daripada harus melalui langkah pemeran tambahan
(Alat Peraga ke @Dov)
Jawaban Asli (Swift 1.x)
Dan, inilah cara Anda melakukannya di Swift (jika Anda mengalami masalah yang sama dengan saya)
Tautan melawan
AudioToolbox.framework
(Buka proyek Anda, pilih target Anda, bangun fase, Tautan Biner dengan Perpustakaan, tambahkan perpustakaan di sana)Setelah selesai:
Yang murahan adalah bahwa
SystemSoundID
pada dasarnya adalahtypealias
(suka cepattypedef
) untukUInt32
, dan itukSystemSoundID_Vibrate
adalah biasaInt
. Compiler memberikan Anda sebuah kesalahan untuk mencoba pemain dariInt
keUInt32
, tapi kesalahan berbunyi sebagai "Tidak bisa dikonversi ke SystemSoundID", yang membingungkan. Mengapa apel tidak membuatnya menjadi Swift enum ada di luar jangkauan saya.@ aponomarenko masuk ke rincian, jawaban saya hanya untuk Swifters di luar sana.
sumber
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
dan dikompilasi dengan baikCara mudah untuk melakukannya adalah dengan Layanan Audio:
sumber
Saya mempunyai masalah besar dengan ini untuk perangkat yang getarannya dimatikan dalam beberapa cara, tetapi kami membutuhkannya untuk bekerja terlepas, karena sangat penting untuk fungsi aplikasi kami, dan karena itu hanya bilangan bulat untuk pemanggilan metode yang didokumentasikan, itu akan lulus validasi. Jadi saya telah mencoba beberapa suara di luar yang terdokumentasi dengan baik di sini: TUNER88 / iOSSystemSoundsLibrary
Saya kemudian menemukan 1352, yang berfungsi terlepas dari saklar diam atau pengaturan pada perangkat
(Settings->vibrate on ring, vibrate on silent)
.sumber
termasuk catatan berikut:
atau
sumber
Untuk iPhone 7/7 Plus atau lebih baru, gunakan tiga API umpan balik Haptic ini.
API yang tersedia
Untuk pemberitahuan:
Gaya yang tersedia adalah
.error
,.success
, dan.warning
. Masing-masing memiliki nuansa tersendiri.Dari dokumen :
Untuk getaran sederhana:
Gaya yang tersedia adalah
.heavy
,.medium
, dan.light
. Ini adalah getaran sederhana dengan berbagai tingkat "kekerasan".Dari dokumen :
Untuk saat pengguna memilih item
Ini adalah yang paling tidak terlihat dari semua haptics, dan juga yang paling cocok untuk saat haptics tidak boleh mengambil alih pengalaman aplikasi.
Dari dokumen :
Catatan
Ada beberapa hal yang perlu diingat ketika menggunakan API ini.
Catatan A
Anda sebenarnya tidak membuat haptic. Anda meminta sistem menghasilkan haptic. Sistem akan memutuskan berdasarkan hal-hal berikut:
Karena itu, sistem akan secara diam-diam mengabaikan permintaan Anda akan haptic jika itu tidak mungkin. Jika ini disebabkan oleh perangkat yang tidak didukung, Anda dapat mencoba ini:
Ganti komentar dalam
switch
-case
pernyataan, dan kode generasi haptic ini akan portabel untuk perangkat iOS lainnya. Ini akan menghasilkan tingkat haptic tertinggi.Catatan B
prepare()
metode, untuk membuatnya siap. Menggunakan Game Anda Sebagai contoh: Anda mungkin tahu bahwa game ini akan berakhir, oleh pengguna yang memiliki HP sangat rendah, atau monster berbahaya berada di dekat mereka.Dalam hal ini, mempersiapkan Mesin Taptic akan menciptakan pengalaman yang lebih berkualitas dan lebih responsif.
Sebagai contoh, katakanlah aplikasi Anda menggunakan recogniser gerakan panci untuk mengubah bagian dunia yang terlihat. Anda ingin haptic dihasilkan ketika pengguna 'terlihat' bulat 360 derajat. Inilah cara Anda dapat menggunakan
prepare()
:sumber
import UIKit
!haptic
di dalam metode ini. Anda tidak memanggilimpactOccured
pada contoh yang sama yang Anda panggilprepare
.Dan jika Anda menggunakan kerangka Xamarin (monotouch), cukup telepon
sumber
Dalam perjalanan saya, saya telah menemukan bahwa jika Anda mencoba salah satu dari yang berikut saat Anda merekam audio, perangkat tidak akan bergetar meskipun diaktifkan.
Metode saya dipanggil pada waktu tertentu dalam pengukuran gerakan perangkat. Saya harus menghentikan rekaman dan kemudian memulai kembali setelah getaran terjadi.
Terlihat seperti ini.
recorder
adalah instance AVRecorder.Semoga ini bisa membantu orang lain yang memiliki masalah yang sama sebelumnya.
sumber
Di iOS 10, dan pada iPhone yang lebih baru, Anda juga dapat menggunakan API haptic. Umpan balik haptic ini lebih lunak daripada AudioToolbox API.
Untuk skenario GAME OVER Anda, umpan balik dampak UI yang berat harus cocok.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Anda dapat menggunakan gaya umpan balik haptic lainnya .
sumber
Dalam Swift:
sumber
Dalam kasus saya, saya menggunakan AVCaptureSession. AudioToolbox sedang dalam fase pembangunan proyek dan itu diimpor tetapi masih tidak berfungsi. Untuk membuatnya berfungsi, saya menghentikan sesi sebelum getaran dan melanjutkan setelah itu.
sumber
Kamu bisa memakai
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
untuk iPhone dan beberapa iPod yang lebih baru.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
untuk iPad.
sumber