Мне нужно сделать iPhone вибрирующим, но я не знаю, как это сделать в Swift. Я знаю, что в Objective-C вы просто пишете:
import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
Но это не работает для меня.
Мне нужно сделать iPhone вибрирующим, но я не знаю, как это сделать в Swift. Я знаю, что в Objective-C вы просто пишете:
import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
Но это не работает для меня.
Краткий пример:
import UIKit
import AudioToolbox
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))            
    }
}
загрузите на свой телефон, и он будет вибрировать. Вы можете поместить его в функцию или IBAction, как вы пожелаете.
В iOS 10 на iPhone 7 или 7 Plus попробуйте:
let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.impactOccurred()
		Другие типы вибрации:
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/
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))
      }
    }
}
		Для 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
        }
    }
}
		Мы можем сделать это в Xcode7.1
import UIKit
import AudioToolbox
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
    }
}
		 Вы можете вибрировать телефон, используя AudioServices или Haptic Feedback.
// AudioServices
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
// Haptic Feedback
UIImpactFeedbackGenerator(style: .medium).impactOccurred()
  Ознакомьтесь с моей платформой с открытым исходным кодом Haptica, она поддерживает Haptic Feedback, AudioServices и уникальные шаблоны вибраций. Работает на Swift 4.2, Xcode 10
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
		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))
        }
		import AudioToolbox
extension UIDevice {
    static func vibrate() {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
    }
}
  Теперь вы можете просто вызвать UIDevice.vibrate() при необходимости.
Здесь вы найдете все коды для каждого .caf и соответствующей категории:
https://github.com/TUNER88/iOSSystemSoundsLibrary
Например, если вам нужна более легкая вибрация, вы можете использовать код 1003.
Удачи и приятного времяпровождения ;)
 Haptica поддерживает как Haptic Feedback, AudioServices и уникальные шаблоны вибрации.
Работает на Swift 4.2, Xcode 10
Swift 4.2
 if #available(iOS 10.0, *) {
      UIImpactFeedbackGenerator(style: .light).impactOccurred()
   }