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に配置できます。
IPhone 7または7 Plus上のiOS 10で、以下を試してください。
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))
}
}
}
ForiOS 10.0 +試すことができます IFeedbackGenerator
上記のシンプルなviewController、テスト「シングルビューアプリ」のView Controllerを置き換えるだけです
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
とユニークな振動パターンの両方をサポートします。 Works on Swift 4.2、Xcode 10
Swift 4.2
if #available(iOS 10.0, *) {
UIImpactFeedbackGenerator(style: .light).impactOccurred()
}
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
IOS 10から利用可能なUINotificationFeedbackGeneratorであり、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を使用できます。
頑張って楽しんでね ;)