Как настроить iPhone на вибрацию один раз?
Например, когда игрок теряет жизнь или игра окончена, iPhone должен вибрировать.
ios
cocoa-touch
avfoundation
vibration
система
источник
источник
Ответы:
Из « Учебника для iPhone: лучший способ проверить возможности устройств iOS »:
Есть две схожие функции, которые принимают параметр
kSystemSoundID_Vibrate
:Во-первых, добавьте платформу AudioToolbox
AudioToolbox.framework
к вашей цели на этапах сборки.Затем импортируйте этот заголовочный файл:
источник
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
(по крайней мере, в бета-версии 2)Swift 2.0+
AudioToolbox теперь представлен
kSystemSoundID_Vibrate
какSystemSoundID
тип, поэтому код:Вместо того, чтобы идти через дополнительный шаг броска
(Реквизит @Dov)
Оригинальный ответ (Swift 1.x)
И вот как вы делаете это на Swift (на случай, если вы столкнулись с той же проблемой, что и я)
Ссылка на
AudioToolbox.framework
(перейдите к своему проекту, выберите цель, этапы сборки, Link Binary with Libraries, добавьте туда библиотеку)Как только это будет завершено:
Дрянная вещь в том, что
SystemSoundID
это в основномtypealias
(необычный быстрыйtypedef
) дляUInt32
, иkSystemSoundID_Vibrate
является регулярнымInt
. Компилятор выдает ошибку при попытке преобразования изInt
вUInt32
, но эта ошибка читается как «Невозможно преобразовать в SystemSoundID», что приводит к путанице. Почему яблоко просто не сделало его быстрым перечислением вне меня.@ aponomarenko в деталях, мой ответ только для Swifters там.
источник
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
и он прекрасно скомпилированПростой способ сделать это с помощью Audio Services:
источник
У меня были большие проблемы с этим для устройств, которые каким-то образом отключили вибрацию, но нам нужно было, чтобы она работала независимо, потому что это важно для функционирования нашего приложения, и поскольку это всего лишь целое число для документированного вызова метода, оно пройдет Проверка. Поэтому я попробовал некоторые звуки, которые были за пределами хорошо документированных здесь: TUNER88 / iOSSystemSoundsLibrary
Затем я наткнулся на 1352, который работает независимо от бесшумного переключателя или настроек на устройстве
(Settings->vibrate on ring, vibrate on silent)
.источник
включает в себя следующее примечание:
или
источник
Для iPhone 7/7 Plus или новее используйте эти три API-интерфейса обратной связи Haptic.
Доступные API
Для уведомлений:
Доступные стили
.error
,.success
и.warning
. У каждого есть свое отличительное чувство.Из документов :
Для простых вибраций:
Доступные стили
.heavy
,.medium
и.light
. Это простые вибрации с различной степенью "твердости".Из документов :
Когда пользователь выбрал предмет
Это наименее заметный из всех тактильных ощущений, и поэтому он наиболее подходит для случаев, когда тактильные ощущения не должны восприниматься приложением.
Из документов :
Ноты
Есть несколько вещей, которые стоит помнить при использовании этих API.
Примечание А
Вы на самом деле не создаете тактильную. Вы запрашиваете систему генерировать тактильный. Система примет решение на основании следующего:
Таким образом, система будет молча игнорировать ваш запрос на тактильное, если это невозможно. Если это связано с неподдерживаемым устройством, вы можете попробовать это:
Замените комментарии в операторах
switch
-case
, и этот тактильный код генерации будет переносимым на другие устройства iOS. Это создаст самый высокий уровень тактильной возможной.Примечание Б
prepare()
метод для перевода его в состояние готовности. Используя пример Game Over: вы можете знать, что игра заканчивается, потому что у пользователя очень низкий уровень здоровья или рядом с ними опасный монстр.В этом случае подготовка Taptic Engine создаст более качественный и более отзывчивый опыт.
Например, допустим, ваше приложение использует распознаватель панорамирования для изменения видимой части мира. Вы хотите, чтобы тактильный генератор генерировался, когда пользователь «смотрит» вокруг 360 градусов. Вот как вы можете использовать
prepare()
:источник
import UIKit
!haptic
внутри этого метода. Вы не вызываетеimpactOccured
тот же экземпляр, который вызываетеprepare
.И если вы используете фреймворк Xamarin (monotouch), просто позвоните
источник
В своих путешествиях я обнаружил, что если вы попытаетесь выполнить одно из следующих действий во время записи звука, устройство не будет вибрировать, даже если оно включено.
Мой метод был вызван в определенное время при измерении движений устройств. Мне пришлось остановить запись, а затем перезапустить ее после того, как произошла вибрация.
Это выглядело так.
recorder
это экземпляр AVRecorderНадеюсь, что это помогает другим, у которых была такая же проблема раньше.
источник
В iOS 10 и на новых iPhone можно также использовать тактильный API. Эта тактильная обратная связь мягче, чем AudioToolbox API.
Для вашего сценария GAME OVER должна подойти сильная обратная связь с UI.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
Вы можете использовать другие тактильные стили обратной связи .
источник
В Свифте:
источник
В моем случае я использовал AVCaptureSession. AudioToolbox находился на стадии сборки проекта и был импортирован, но все еще не работал. Чтобы заставить это работать, я остановил сеанс до вибрации и продолжил после этого.
источник
Ты можешь использовать
1) AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
для iPhone и нескольких новых iPod.
2) AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
для iPad.
источник