web-dev-qa-db-ja.com

Swiftを使用してiPhoneを振動させる方法は?

IPhoneを振動させる必要がありますが、Swiftでそれを行う方法がわかりません。 Objective-Cでは、次のように書くことを知っています。

import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

しかし、それは私のために働いていません。

105
Nico Gutraich

短い例:

import UIKit
import AudioToolbox

class ViewController: UIViewController {

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

お使いの携帯電話にロードすると、振動します。必要に応じて、関数またはIBActionに配置できます。

207
Steve Rosenberg

IPhone 7または7 Plus上のiOS 10で、以下を試してください。

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

その他の振動タイプ:

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/

45
Michael

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

    }

}
24
muhasturk

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

Xcode7.1でこれを行うことができます

import UIKit
import AudioToolbox


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
    }
}
17
ken0nek

AudioServicesまたはHaptic Feedbackのいずれかを使用して、電話を振動させることができます。

// AudioServices
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

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

私のオープンソースフレームワークをチェックしてください Haptica 、それはHaptic FeedbackAudioServicesとユニークな振動パターンの両方をサポートします。 Works on Swift 4.2、Xcode 10

5
efremidze

Swift 4.2

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

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))
        }
1
Sergei Lysiuk
import AudioToolbox

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

これで、必要に応じてUIDevice.vibrate()を呼び出すことができます。

0

ここでは、各.cafおよび関連するカテゴリのすべてのコードを検索できます。

https://github.com/TUNER88/iOSSystemSoundsLibrary

たとえば、より軽い振動が必要な場合は、コード1003を使用できます。

頑張って楽しんでね ;)

0
O. Boujaouane