Como o iPhone pode ser configurado para vibrar uma vez?
Por exemplo, quando um jogador perde uma vida ou o jogo termina, o iPhone deve vibrar.
ios
cocoa-touch
avfoundation
vibration
sistema
fonte
fonte
Respostas:
Do " Tutorial do iPhone: melhor maneira de verificar os recursos dos dispositivos iOS ":
Existem duas funções aparentemente semelhantes que usam um parâmetro
kSystemSoundID_Vibrate
:Primeiro, adicione a estrutura AudioToolbox
AudioToolbox.framework
ao seu destino em Fases de construção.Em seguida, importe este arquivo de cabeçalho:
fonte
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(pelo menos a partir da versão beta 2)Swift 2.0+
AudioToolbox agora apresenta a
kSystemSoundID_Vibrate
como umSystemSoundID
tipo, de modo que o código é:Em vez de ter que passar pela etapa de elenco extra
(Adereços para @Dov)
Resposta original (Swift 1.x)
E aqui está como você faz isso no Swift (caso você tenha o mesmo problema que eu)
Link contra
AudioToolbox.framework
(Vá para o seu projeto, selecione seu destino, crie fases, Vincule o Binário às Bibliotecas, adicione a biblioteca)Depois de concluído:
A coisa brega é que
SystemSoundID
é basicamente umtypealias
(fantasia rápidatypedef
) para umUInt32
, e okSystemSoundID_Vibrate
é um regularInt
. O compilador fornece um erro ao tentar converter deInt
paraUInt32
, mas o erro é exibido como "Não é possível converter para SystemSoundID", o que é confuso. Por que a maçã não a transformou em um enum Swift está além de mim.@ aponomarenko entra em detalhes, minha resposta é apenas para os Swifters por aí.
fonte
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
e compilado bemUma maneira simples de fazer isso é com os Serviços de áudio:
fonte
Eu tive um grande problema com isso para dispositivos que tinham a vibração desativada de alguma maneira, mas precisávamos que funcionasse independentemente, porque é fundamental para o funcionamento do aplicativo e, como é apenas um número inteiro para uma chamada de método documentada, ele passará validação. Então, eu tentei alguns sons que estavam fora dos bem documentados aqui: TUNER88 / iOSSystemSoundsLibrary
Tropecei em 1352, que está funcionando independentemente da opção silenciosa ou das configurações do dispositivo
(Settings->vibrate on ring, vibrate on silent)
.fonte
inclui a seguinte nota:
ou
fonte
Para um iPhone 7/7 Plus ou mais recente, use essas três APIs de feedback tátil.
APIs disponíveis
Para notificações:
Estilos disponíveis são
.error
,.success
e.warning
. Cada um tem sua própria sensação distinta.Dos documentos :
Para vibrações simples:
Estilos disponíveis são
.heavy
,.medium
e.light
. São vibrações simples com graus variados de "dureza".Dos documentos :
Para quando o usuário selecionou um item
Esse é o menos perceptível de todos os hápticos e, portanto, é o mais adequado para quando os hápticos não devem assumir a experiência do aplicativo.
Dos documentos :
Notas
Vale lembrar algumas coisas ao usar essas APIs.
Nota A
Na verdade, você não cria o háptico. Você solicita que o sistema gere um haptic. O sistema decidirá com base no abaixo:
Portanto, o sistema ignorará silenciosamente sua solicitação de um háptico, se não for possível. Se isso ocorre devido a um dispositivo não suportado, você pode tentar o seguinte:
Substitua os comentários no
switch
-case
instruções e esse código de geração tátil será portátil para outros dispositivos iOS. Gerará o nível mais alto possível de háptico.Nota B
prepare()
método, para colocá-lo em um estado de prontidão. Usando o exemplo de Game Over: você pode saber que o jogo está prestes a terminar, porque o usuário tem um HP muito baixo ou um monstro perigoso está perto deles.Nesse caso, a preparação do Taptic Engine criaria uma experiência mais responsiva e de maior qualidade.
Por exemplo, digamos que seu aplicativo use um reconhecedor de gestos de panorâmica para alterar a parte do mundo visível. Você deseja gerar um háptico quando o usuário "olhar" em torno de 360 graus. Aqui está como você pode usar
prepare()
:fonte
import UIKit
!haptic
dentro deste método. Você não está chamandoimpactOccured
na mesma instância que chamaprepare
.E se você estiver usando a estrutura Xamarin (monotouch), basta chamar
fonte
Nas minhas viagens, descobri que, se você tentar qualquer um dos seguintes itens enquanto estiver gravando áudio, o dispositivo não vibrará, mesmo se estiver ativado.
Meu método foi chamado em um momento específico na medição dos movimentos do dispositivo. Eu tive que parar a gravação e depois reiniciá-la após a vibração.
Parecia assim.
recorder
é uma instância do AVRecorder.Espero que isso ajude outras pessoas que tiveram o mesmo problema antes.
fonte
No iOS 10 e em iPhones mais novos, você também pode usar a API háptica. Esse feedback tátil é mais suave que a API AudioToolbox.
Para o seu cenário GAME OVER, um feedback de impacto na interface do usuário pesado deve ser adequado.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Você pode usar os outros estilos de feedback tátil .
fonte
Em Swift:
fonte
No meu caso, eu estava usando o AVCaptureSession. O AudioToolbox estava nas fases de construção do projeto e foi importado, mas ainda não funcionou. Para fazer funcionar, parei a sessão antes da vibração e continuei depois.
fonte
Você pode usar
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
para iPhone e alguns iPods mais novos.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
para iPads.
fonte