[iOS 10] UIFeedbackGenerator で iPhone 7 の Taptic Engine を制御する
iPhone 7 を購入しました
光り輝くジェットブラックに機種変更しました!
総務省指定マークかっこいいですね!
UIFeedbackGenerator とは
UIFeedbackGenerator は、iOS 10 から追加された、iPhone 7 及び iPhone 7 Plus の Taptic Engine を制御するためのクラスです。
Taptic Engine とは何かと言うと、ホームボタンをタップしたり、通知を開いたり、Date Picker を回した時にポコポコ動くアレです。この感覚は、実際に iPhone 7 を触ってみないと解らないと思うので、ピンと来ない場合はまず実機を触ってみてください。
この Taptic Engine は、iOS アプリから制御できます。
UIFeedbackGenerator のサブクラス
UIFeedbackGenerator 自体は抽象クラスですので、実際には次の3つのいずれかを使います。
- UIImpactFeedbackGenerator : オブジェクトが衝突したり、インパクトのあるフィードバックを与えたいときに使う
- UISelectionFeedbackGenerator : 選択範囲を変更するときのフィードバックを与えたいときに使う
- UINotificationFeedbackGenerator : 成功や失敗、警告などのフィードバックを与えたいときに使う
使い方
基本的には、次の流れで制御します。
- Generator をインスタンス化する
prepare()
を呼び出す (オプション)- 発動する (
impactOccurred()
などを呼び出す) - Generator をリリースする (オプション)
prepare()
はオプションですが、事前にやっておくと実際に使うタイミングで遅延なく発動できるようです。
次の例では、ボタンをタップしたときにフィードバックを与えています。UIImpactFeedbackGenerator をインスタンス化するときには UIImpactFeedbackStyle を渡せます。これはいわゆる強さです。
import UIKit class ViewController: UIViewController { // インスタンス化 let generator = UIImpactFeedbackGenerator(style: .heavy) override func viewDidLoad() { super.viewDidLoad() // 準備 generator.prepare() } @IBAction func buttonTapped(_ sender: UIButton) { // 発動 (ポコる) generator.impactOccurred() } }
上記のコードを実機で動かしてみると、ポコッと動きます。
まとめ
実際に iPhone 7 を使っていると、いろいろなタイミングでポコポコ動きます。こういうフィードバックって使っていてハッとなりますし、楽しいし、とても大事ですよね。
見た目だけではなく、こういうところまで気を配れるアプリを作っていきたいですね。