web-dev-qa-db-fra.com

Comment faire vibrer un iPhone avec Swift?

J'ai besoin de faire vibrer l'iPhone, mais je ne sais pas comment le faire avec Swift. Je sais que dans Objective-C, vous écrivez simplement:

import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

Mais ça ne marche pas pour moi.

95
Nico Gutraich

Petit exemple:

import UIKit
import AudioToolbox

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))            
    }
}

charger sur votre téléphone et il va vibrer. Vous pouvez le mettre dans une fonction ou dans IBAction à votre guise.

190
Steve Rosenberg

Dans iOS 10 sur iPhone 7 ou 7 Plus, essayez: 

let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.impactOccurred()
47
Adam Smaka

Autres types de vibrations:

import AudioToolbox

AudioServicesPlaySystemSound(1519) // Actuate "Peek" feedback (weak boom)
AudioServicesPlaySystemSound(1520) // Actuate "Pop" feedback (strong boom)
AudioServicesPlaySystemSound(1521) // Actuate "Nope" feedback (series of three weak booms)

Pour en savoir plus sur les vibrations - http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

37
Michael

Pour iOS 10.0+ Vous pouvez essayer UIFeedbackGenerator

ViewController simple ci-dessus, il suffit de remplacer votre contrôleur de vue dans votre test "application à vue unique"

import UIKit

class ViewController: UIViewController {

    var i = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        let btn = UIButton()
        self.view.addSubview(btn)
        btn.translatesAutoresizingMaskIntoConstraints = false

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

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

    @objc 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
        }
    }
}
20
Malder

Nous pouvons le faire dans Xcode7.1

import UIKit
import AudioToolbox


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
    }
}
16
ken0nek

Swift 4.2 Mise à jour

Insérez simplement le code ci-dessous dans votre projet. 

Utilisation  

Vibration.success.vibrate()

Code source

enum Vibration {
case error
case success
case warning
case light
case medium
case heavy
case selection
case oldSchool

func vibrate() {

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

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

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

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

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

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

  case .selection:
    let generator = UISelectionFeedbackGenerator()
    generator.selectionChanged()

  case .oldSchool:
    AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
  }

}

}
14
muhasturk

Swift 4.2

 if #available(iOS 10.0, *) {
      UIImpactFeedbackGenerator(style: .light).impactOccurred()
   } 
4
Rashid Latif
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
1
Dhaval H. Nena

UINotificationFeedbackGenerator disponible à partir de iOS 10 et fonctionne avec Haptic v2, nous pouvons vérifier ceci:

  let feedbackSupportLevel = UIDevice.current.value(forKey: "_feedbackSupportLevel") as? Int
        if #available(iOS 10.0, *), let feedbackSupportLevel = feedbackSupportLevel, feedbackSupportLevel > 1 {
            do { // 1
                let generator = UIImpactFeedbackGenerator(style: .medium)
                generator.impactOccurred()
            }

            do { // or 2
                let generator = UINotificationFeedbackGenerator()
                generator.notificationOccurred(.success)
            }
        } else {
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        }
1
Sergei Lysiuk

Vous pouvez faire vibrer le téléphone à l'aide de AudioServices ou Haptic Feedback.

// AudioServices
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

// Haptic Feedback
UIImpactFeedbackGenerator(style: .medium).impactOccurred()

Checkout my open source framework Haptica , il prend en charge les modèles Haptic Feedback, AudioServices et les modèles de vibrations uniques. Fonctionne sur Swift 4.2, Xcode 10

1
efremidze
import AudioToolbox

extension UIDevice {
    static func vibrate() {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
    }
}

Vous pouvez maintenant appeler UIDevice.vibrate() au besoin.

0
Mohammad Razipour

Vous trouverez ici tous les codes pour chaque fichier .caf et catégorie associée:

https://github.com/TUNER88/iOSSystemSoundsLibrary

Par exemple, si vous souhaitez une vibration plus légère, vous pouvez utiliser le code 1003.

Bonne chance et amusez-vous bien ;)

0
O. Boujaouane