[iOS 10] UIFeedbackGenerator で iPhone 7 の Taptic Engine を制御する

2016.10.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

iPhone 7 を購入しました

光り輝くジェットブラックに機種変更しました!

iphone7. jpg

総務省指定マークかっこいいですね!

UIFeedbackGenerator とは

UIFeedbackGenerator は、iOS 10 から追加された、iPhone 7 及び iPhone 7 Plus の Taptic Engine を制御するためのクラスです。

Taptic Engine とは何かと言うと、ホームボタンをタップしたり、通知を開いたり、Date Picker を回した時にポコポコ動くアレです。この感覚は、実際に iPhone 7 を触ってみないと解らないと思うので、ピンと来ない場合はまず実機を触ってみてください。

この Taptic Engine は、iOS アプリから制御できます。

UIFeedbackGenerator のサブクラス

UIFeedbackGenerator 自体は抽象クラスですので、実際には次の3つのいずれかを使います。

使い方

基本的には、次の流れで制御します。

  1. Generator をインスタンス化する
  2. prepare() を呼び出す (オプション)
  3. 発動する (impactOccurred() などを呼び出す)
  4. Generator をリリースする (オプション)

prepare() はオプションですが、事前にやっておくと実際に使うタイミングで遅延なく発動できるようです。

次の例では、ボタンをタップしたときにフィードバックを与えています。UIImpactFeedbackGenerator をインスタンス化するときには UIImpactFeedbackStyle を渡せます。これはいわゆる強さです。

ViewController.swift

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 を使っていると、いろいろなタイミングでポコポコ動きます。こういうフィードバックって使っていてハッとなりますし、楽しいし、とても大事ですよね。

見た目だけではなく、こういうところまで気を配れるアプリを作っていきたいですね。

参考