
簡単にiPhoneをブルっと振動させる方法を備忘録として残しておきます。
1.Tap gesture Recognizer
Tap gesture Recognizerを任意のUI部品にドラドロ。
2.アイコンの確認
すると、そのViewContrllerにTap gesture Recognizerのアイコンが出現する。
3.アイコンを繋ぐ
そのアイコンをCtrlドラッグでコードとつなげ、任意の名前をつける。
私はTap gesture RecognizerをimageViewに置いたので「imageViewTap」とした。
4.コードを書く
1 2 3 4 |
//ブルっとさせるコード let generator = UINotificationFeedbackGenerator() generator.notificationOccurred(.success) |
このコードをメソッド内に記述すればOK
ちなみに、.successのところは
warningとerrorなどから選べる。
successとwarningはほぼ同じバイブに感じましたが、errorは明確に振え方が違いました。
もっと小さく振動させたい
上記の.success/.warning/.errorよりももっと小さく振るわせたい(例えばTwitterのいいねを押した時などの本当に些細な振動)場合、
UIImpactFeedbackGeneratorを使えばできます。
→より詳しい記事
fa-chevron-circle-right実装方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//実装方法 class ViewController: UIViewController { private let feedbackGenerator: Any? = { if #available(iOS 10.0, *) { let generator: UIImpactFeedbackGenerator = UIImpactFeedbackGenerator(style: .light) generator.prepare() return generator } else { return nil } }() @IBAction private func light() { if #available(iOS 10.0, *), let generator = feedbackGenerator as? UIImpactFeedbackGenerator { generator.impactOccurred() } } |
そのまま上記の記事から引用させていただきました。
このコードを使うと例えば、
新規登録ボタンを押すと振動します。
上記のコードを全てのVCに書くのは多い
そんな時は、新たにSwiftファイルを作り、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//簡単に使えるようにした構造体 import Foundation import UIKit struct Feedbacker { static func notice(type: UINotificationFeedbackGenerator.FeedbackType) { if #available(iOS 10.0, *) { let generator = UINotificationFeedbackGenerator() generator.prepare() generator.notificationOccurred(type) } } static func impact(style: UIImpactFeedbackGenerator.FeedbackStyle) { if #available(iOS 10.0, *) { let generator = UIImpactFeedbackGenerator(style: style) generator.prepare() generator.impactOccurred() } } static func selection() { if #available(iOS 10.0, *) { let generator = UISelectionFeedbackGenerator() generator.prepare() generator.selectionChanged() } } } |
このコードを書けばいいです。
より詳しい記事 から引用
また、使い方は任意の箇所で
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//使い方 // notice Feedbacker.notice(type: .success) Feedbacker.notice(type: .warning) Feedbacker.notice(type: .error) // impact Feedbacker.impact(style: .heavy) Feedbacker.impact(style: .light) Feedbacker.impact(style: .medium) // selection Feedbacker.selection() |
これらのコードを記述すればいいです。
このような感じです。
ちなみに、Twitterのいいねを押した際の挙動と同じなのはおそらく
Feedbacker.impact(style: .medium)
と思います。