¿Cómo se puede configurar el iPhone para que vibre una vez?
Por ejemplo, cuando un jugador pierde una vida o el juego termina, el iPhone debería vibrar.
ios
cocoa-touch
avfoundation
vibration
sistema
fuente
fuente
Respuestas:
Desde " Tutorial de iPhone: Mejor manera de verificar las capacidades de los dispositivos iOS ":
Hay dos funciones aparentemente similares que toman un parámetro
kSystemSoundID_Vibrate
:Primero, agregue el marco AudioToolbox
AudioToolbox.framework
a su objetivo en Build Phases.Luego, importe este archivo de encabezado:
fuente
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(al menos a partir de beta 2)Swift 2.0+
AudioToolbox presenta ahora el
kSystemSoundID_Vibrate
como unSystemSoundID
tipo, por lo que el código es:En lugar de tener que pasar por el paso de lanzamiento adicional
(Apoyos para @Dov)
Respuesta original (Swift 1.x)
Y así es como lo haces en Swift (en caso de que te encuentres con el mismo problema que yo)
Enlace contra
AudioToolbox.framework
(vaya a su proyecto, seleccione su objetivo, construya fases, enlace binario con bibliotecas, agregue la biblioteca allí)Una vez que se haya completado:
Lo cursi es que
SystemSoundID
es básicamente untypealias
(veloz fantasíatypedef
) para unUInt32
, ykSystemSoundID_Vibrate
es un habitualInt
. El compilador le da un error al intentar convertir desdeInt
aUInt32
, pero el error se lee como "No se puede convertir a SystemSoundID", lo cual es confuso. ¿Por qué Apple no lo convirtió en una enumeración Swift?@ aponomarenko entra en detalles, mi respuesta es solo para los Swifters.
fuente
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
y compilé bienUna forma sencilla de hacerlo es con los servicios de audio:
fuente
Tuve un gran problema con esto para los dispositivos que tenían la vibración desactivada de alguna manera, pero necesitábamos que funcionara de todos modos, porque es fundamental para el funcionamiento de nuestra aplicación, y dado que es solo un número entero para una llamada de método documentada, pasará validación. Así que probé algunos sonidos que estaban fuera de los bien documentados aquí: TUNER88 / iOSSystemSoundsLibrary
Luego me topé con 1352, que funciona independientemente del interruptor silencioso o la configuración del dispositivo
(Settings->vibrate on ring, vibrate on silent)
.fuente
incluye la siguiente nota:
o
fuente
Para un iPhone 7/7 Plus o más reciente, use estas tres API de retroalimentación háptica.
API disponibles
Para notificaciones:
Estilos disponibles son
.error
,.success
y.warning
. Cada uno tiene su propia sensación distintiva.De los documentos :
Para vibraciones simples:
Estilos disponibles son
.heavy
,.medium
y.light
. Estas son vibraciones simples con diversos grados de "dureza".De los documentos :
Para cuando el usuario seleccionó un elemento
Este es el menos notable de todos los hápticos, y por lo tanto, es el más adecuado para cuando los hápticos no deberían hacerse cargo de la experiencia de la aplicación.
De los documentos :
Notas
Hay un par de cosas que vale la pena recordar al usar estas API.
No hay té
En realidad no creas el háptico. Usted solicita el sistema genere una háptica. El sistema decidirá en base a lo siguiente:
Por lo tanto, el sistema ignorará silenciosamente su solicitud de un háptico si no es posible. Si esto se debe a un dispositivo no compatible, puede intentar esto:
Sustituya los comentarios en las declaraciones
switch
-case
, y este código de generación háptica será portátil para otros dispositivos iOS. Generará el mayor nivel de háptico posible.Nota B
prepare()
método para ponerlo en un estado de preparación. Ejemplo de uso de Game Over: es posible que sepa que el juego está a punto de finalizar, ya que el usuario tiene un HP muy bajo o un monstruo peligroso está cerca de ellos.En este caso, preparar el Taptic Engine crearía una experiencia de mayor calidad y más receptiva.
Por ejemplo, supongamos que su aplicación utiliza un reconocedor de gestos panorámicos para cambiar la parte del mundo visible. Desea generar un háptico cuando el usuario "mira" alrededor de 360 grados. Aquí es cómo puedes usar
prepare()
:fuente
import UIKit
!haptic
dentro de este método. No estás llamandoimpactOccured
en la misma instancia que llamasprepare
.Y si está utilizando el marco Xamarin (monotouch), simplemente llame
fuente
En mis viajes descubrí que si intentas cualquiera de los siguientes mientras estás grabando audio, el dispositivo no vibrará incluso si está habilitado.
Mi método fue llamado en un momento específico en la medición de los movimientos de los dispositivos. Tuve que detener la grabación y luego reiniciarla después de que ocurriera la vibración.
Se veía así.
recorder
es una instancia de AVRecorder.Espero que esto ayude a otros que han tenido el mismo problema antes.
fuente
En iOS 10, y en iPhones más nuevos, también puede usar API háptica. Esta retroalimentación háptica es más suave que la API AudioToolbox.
Para su escenario GAME OVER, una retroalimentación de impacto de IU debe ser adecuada.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Podrías usar los otros estilos de retroalimentación háptica .
fuente
En Swift:
fuente
En mi caso estaba usando AVCaptureSession. AudioToolbox estaba en las fases de compilación del proyecto y se importó pero aún no funcionaba. Para que funcione, detuve la sesión antes de la vibración y continué después de eso.
fuente
Puedes usar
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
para iPhone y algunos iPods más nuevos.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
para iPads
fuente