Как заставить iPhone вибрировать с помощью Swift?

Мне нужно сделать iPhone вибрирующим, но я не знаю, как это сделать в Swift. Я знаю, что в Objective-C вы просто пишете:

import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

Но это не работает для меня.

Ответ 1

Краткий пример:

import UIKit
import AudioToolbox

class ViewController: UIViewController {

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

загрузите на свой телефон, и он будет вибрировать. Вы можете поместить его в функцию или IBAction, как вы пожелаете.

Ответ 2

В iOS 10 на iPhone 7 или 7 Plus попробуйте:

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

Ответ 3

Другие типы вибрации:

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)

Подробнее о вибрации - http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

Ответ 4

Swift 4.2 Обновлено

Просто вставьте код ниже в ваш проект.

использование

Vibration.success.vibrate()

Исходный код

import AVFoundation
import UIKit

    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))
      }

    }

}

Ответ 5

Для iOS 10. 0+ Вы можете попробовать UIFeedbackGenerator

Простой viewController выше, просто замените ваш контроллер представления в вашем тестовом "приложении одного представления"

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
        }
    }
}

Ответ 6

Мы можем сделать это в Xcode7.1

import UIKit
import AudioToolbox


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
    }
}

Ответ 7

Вы можете вибрировать телефон, используя AudioServices или Haptic Feedback.

// AudioServices
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

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

Ознакомьтесь с моей платформой с открытым исходным кодом Haptica, она поддерживает Haptic Feedback, AudioServices и уникальные шаблоны вибраций. Работает на Swift 4.2, Xcode 10

Ответ 8

AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))

Ответ 9

UINotificationFeedbackGenerator доступен из iOS 10 и работает с Haptic v2, мы можем проверить это:

  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))
        }

Ответ 10

import AudioToolbox

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

Теперь вы можете просто вызвать UIDevice.vibrate() при необходимости.

Ответ 11

Здесь вы найдете все коды для каждого .caf и соответствующей категории:

https://github.com/TUNER88/iOSSystemSoundsLibrary

Например, если вам нужна более легкая вибрация, вы можете использовать код 1003.

Удачи и приятного времяпровождения ;)

Ответ 12

Haptica поддерживает как Haptic Feedback, AudioServices и уникальные шаблоны вибрации.

Работает на Swift 4.2, Xcode 10

Ответ 13

Swift 4.2

 if #available(iOS 10.0, *) {
      UIImpactFeedbackGenerator(style: .light).impactOccurred()
   }