Таптика в iOS 9
Можете ли вы использовать Taptic Engine в iOS 9 с iPhone 6s? WatchOS2 и OS X имеют возможность использовать тактильный движок, поэтому я предположил, что это будет и в iOS 9, но я не смог найти API для него.
4 ответа
Уу, у меня был реверс-инжиниринг UIKit
вещи, и я нашел другой (гораздо более простой) способ активировать обратную связь через TapticEngine
! Мы можем просто использовать AudioToolbox
рамки и несколько магических констант.
import AudioToolbox
AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom)
AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom)
AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms)
Надеюсь это поможет!
В настоящее время нет общедоступного API в iOS 9 и iOS 9.1.
Отказ от ответственности: есть способ напрямую взаимодействовать с Taptic Engine, но есть частный метод. Вы не должны использовать его в приложениях App Store.
Однако, если вы больше увлекаетесь экспериментированием, то можете обнаружить, что в iOS 9 доступен новый закрытый класс: _UITapticEngine
, Вы можете найти его заголовок здесь. Чтобы добраться до него, есть новое свойство на UIDevice
класс, называется _tapticEngine
, Смотрите полный заголовок для UIDevice
здесь Вы можете пойти дальше и импортировать эти заголовки, или просто использовать NSSelectorFromString
функция и performSelector:
способ добраться до ленточного движка:
id tapticEngine = [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"_tapticEngine") withObject:nil];
[tapticEngine performSelector:NSSelectorFromString(@"actuateFeedback:") withObject:@(1001)]; // Peek
[tapticEngine performSelector:NSSelectorFromString(@"endUsingFeedback:") withObject:@(1002)]; // Pop
Это активирует ленточный движок для определенного жеста, хотя и Peek, и Pop кажутся мне похожими. Если вы укажете любую другую константу, то по умолчанию она будет вибрировать.
Я собрал быстрое тестовое репо вместе на GitHub, который включает в себя Swift-совместимый API для использования движка taptic:
UIDevice.currentDevice().tapticEngine().actuateFeedback(UITapticEngineFeedbackPeek)
Используйте на свой риск!
Я также написал немного больше в блоге, объясняя это.
В iOS 10 появился новый API под названием UIFeedbackGenerator. Смотрите этот пост для более подробной информации. Пока работает только на iPhone 7.
Кажется, в настоящее время не опубликовано API для iOS 9.
На OSX вам нужно использовать NSHapticFeedbackManager
:
Описание класса NSHapticFeedbackManager
и вот API для WatchOS2
:
Описание класса WKInterfaceDevice
Просто ища здесь, вы можете увидеть, что я говорю:
Haptic search (iOS pre-release) - ничего не показывает
Хаптический поиск (предварительная версия OSX) - показывает NSHapticFeedbackManager