iphone_sensor_s_animation-0

Comment générer le retour haptique avec UIFeedbackGenerator

Disponible à partir d’iOS 10.0

La technologie 3D Touch introduit par Apple le 9 septembre 2014 lors de la présentation de l’Apple Watch. Puis disponible sur un iPhone, depuis la version 6S et 6S Plus. Indisponible aux développeurs jusqu’à lors.

iOS 10 introduit de nouvelles façons de générer un retour haptique en utilisant des modèles de vibration prédéfinis partagés par toutes les applications, aidant ainsi les utilisateurs à comprendre que les différents types de commentaires portent une signification particulière. Le noyau de cette fonctionnalité est fournie par UIFeedbackGenerator, mais qui est juste une classe abstraite – les trois classes qui vous intéressent vraiment sont UINotificationFeedbackGenerator, UIImpactFeedbackGenerator et UISelectionFeedbackGenerator.

Le premier de ceux-ci, UINotificationFeedbackGenerator, vous permet de générer des retours sur la base de trois événements système: erreur, le succès, et d’avertissement.

Le second, UIImpactFeedbackGenerator, vous permet de générer légère, moyenne, et des effets lourds que Apple dit fournir une « métaphore physique qui complète l’expérience visuelle. »

Enfin, UISelectionFeedbackGenerator génère une rétroaction qui doit être déclenché lorsque l’utilisateur est en train de changer leur sélection sur l’écran, par exemple se déplaçant à travers un PickerView.

A ce jour, seul le nouveau moteur Taptic trouvé dans l’iPhone 7 et iPhone 7 Plus supporte ces API. Les autres appareils ignorent silencieusement les demandes haptiques.

Pour commencer à essayer ces API, créez un modèle SingleViewApplication dans Xcode, puis remplacer le ViewController avec ce code en swift:

import UIKit

class ViewController: UIViewController {
    var i = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        let btn = UIButton()
        btn.translatesAutoresizingMaskIntoConstraints = false

        btn.widthAnchor.constraint(equalToConstant: 128).isActive = true
        btn.heightAnchor.constraint(equalToConstant: 128).isActive = true
        btn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        btn.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        btn.setTitle("Tap here!", for: .normal)
        btn.setTitleColor(UIColor.red, for: .normal)
        btn.addTarget(self, action: #selector(tapped), for: .touchUpInside)

        view.addSubview(btn)
    }

    func tapped() {
        i += 1
        print("Running \(i)")

        switch i {
        case 1:
            let generator = UINotificationFeedbackGenerator()
            generator.notificationOccurred(.error)

        case 2:
            let generator = UINotificationFeedbackGenerator()
            generator.notificationOccurred(.success)

        case 3:
            let generator = UINotificationFeedbackGenerator()
            generator.notificationOccurred(.warning)

        case 4:
            let generator = UIImpactFeedbackGenerator(style: .light)
            generator.impactOccurred()

        case 5:
            let generator = UIImpactFeedbackGenerator(style: .medium)
            generator.impactOccurred()

        case 6:
            let generator = UIImpactFeedbackGenerator(style: .heavy)
            generator.impactOccurred()

        default:
            let generator = UISelectionFeedbackGenerator()
            generator.selectionChanged()
            i = 0
        }
    }
}

Lorsque vous exécutez que sur votre téléphone, en appuyant sur le « Tap here ! » vous aurez les retours haptique par ordre.

Car cela peut prendre un peu de temps au système pour préparer le retour haptique, Apple recommande d’appeler la méthode prepare() avant de déclencher l’effet haptique. Si vous ne le faites pas, il y aura un léger décalage entre l’effet visuel et haptique correspondant, cela peut dérouter certains utilisateurs.

Apple demande expressément d’utiliser judicieusement le retour haptique des iPhone, afin d’éviter une mauvaise expérience utilisateur. De plus n’oubliez pas les anciens iPhone !

Un commentaire

Laisser un commentaire