Haptic feedback на iPhone 6s
В iOS 10 Apple представила API для работы с виброоткликом устройства. К сожалению, этот API работает только на iPhone7 и iPhone 7 Plus. Все остальные устройства этот код просто игнорируют и не выполняют никаких вибраций.
Однако, на iPhone 6s, при использовании 3D Touch, смартфон выполняет виброотклик. Мне стало интересно, можно ли программно вызвать нужный мне паттерн вибрации.
С удивлением обнаружил, что документация по данной теме отсутствует. Стал искать на просторах интернета и нашел весьма элегантное и очень простое решение данной проблемы. Хочу предупредить: среди вариантов, найденных в интернет были такие, которые использовали недокументированные Apple методы. Использование таких методов запрещено для приложений, публикуемых в AppStore. Поэтому от них я отказался сразу и не рассматривал их вообще.
Что касается метода, который будет описан ниже, он тоже не описан в официальной документации, но он не использует никакие незадокументированные методы. Думаю, увидев вариант вызова виброотклика 3D Touch, вы сами поймете принцип вызова.
Программный вызов виброотклика на iPhone 6s
Создадим проект, в котором разместим три кнопки, создадим для них экшкны. Я не стану описывать этот процесс. Думаю, читатели смогут сделать это все самостоятельно. Но на один момент все же хочу обратить внимание.
При добавлении IBAction в код ViewController, я указывал что событие (Event) у кнопки будет на стандартное Touch Up Inside, которое подставляется автоматически, а событие Touch Down. Это нужно для того, что бы вызвать метод в момент нажатия на кнопку, а не ее отпускания.
Перед декларацией класса ViewController после импорта UIKit, нужно импортировать Фреймворк AudioToolbox
// // proSwift.ru // import UIKit import AudioToolbox class ViewController: UIViewController { ...
Ну и в итоге для вызова нужного виброотклика нужно вызвать функцию AudioServicesPlaySystemSound().
// // proSwift.ru // AudioServicesPlaySystemSound(1519) // peek AudioServicesPlaySystemSound(1520) // pop AudioServicesPlaySystemSound(1521) // nope
Текст ViewController получился таким:
// // proSwift.ru // import UIKit import AudioToolbox class ViewController: UIViewController { @IBOutlet weak var peek: UIButton! @IBOutlet weak var pop: UIButton! @IBOutlet weak var nope: UIButton! private func designFor(button: UIButton) { button.layer.cornerRadius = 8 button.layer.shadowOffset = CGSize(width: 4, height: 4) button.layer.shadowRadius = 4 button.layer.shadowColor = UIColor.black.cgColor button.layer.shadowOpacity = 0.6 } override func viewDidLoad() { super.viewDidLoad() designFor(button: peek) designFor(button: pop) designFor(button: nope) } @IBAction func peekHandler(_ sender: UIButton) { AudioServicesPlaySystemSound(1519) } @IBAction func popHandler(_ sender: UIButton) { AudioServicesPlaySystemSound(1520) } @IBAction func nopeHandler(_ sender: UIButton) { AudioServicesPlaySystemSound(1521) } }
Запустите приложение на реальном устройстве и поднажимайте на кнопки. Вы почувствуете три интегрированных паттерны виброоткликов.
Ссылка проект на gitHub.
Добавить комментарий