如何让 iphone 在我点击按钮时振动两次?

How to make my iphone vibrate twice when I click on a button?

我搜索 iphone 当我点击按钮时振动两次(如短信提醒振动)

AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate)) 我只得到一个正常的振动,但我想要两条短裤 :/.

#import <AudioToolbox/AudioServices.h>


AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))

这是 swift 函数...请参阅 this 文章了解详细说明。

这是我想出的:

import UIKit
import AudioToolbox

class ViewController: UIViewController {

    var counter = 0
    var timer : NSTimer?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func vibratePhone() {
        counter++
        switch counter {
        case 1, 2:
            AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
        default:
            timer?.invalidate()
        }
    }

    @IBAction func vibrate(sender: UIButton) {
        counter = 0
        timer = NSTimer.scheduledTimerWithTimeInterval(0.6, target: self, selector: "vibratePhone", userInfo: nil, repeats: true)
    }
}

当您按下按钮时,计时器将启动并以所需的时间间隔重复。 NSTimer 调用 vibratePhone(Void) 函数,从那里我可以控制 phone 振动的次数。在这种情况下,我使用了一个开关,但您也可以使用 if else。只需设置一个计数器,在每次调用函数时进行计数。

更新 iOS 10

在 iOS 10 中,有一些新方法可以用最少的代码完成此操作。

方法一 - UIImpactFeedbackGenerator:

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

方法二 - UINotificationFeedbackGenerator:

let feedbackGenerator = UINotificationFeedbackGenerator()
feedbackGenerator.notificationOccurred(.error)

方法 3 - UISelectionFeedbackGenerator:

let feedbackGenerator = UISelectionFeedbackGenerator()
feedbackGenerator.selectionChanged()

如果你只想振动两次。你可以..

    func vibrate() {
        AudioServicesPlaySystemSoundWithCompletion(kSystemSoundID_Vibrate) {
            AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
        }
    }

并且可以通过使用递归和AudioServicesPlaySystemSoundWithCompletion.

进行多次振动

你可以像vibrate(count: 10)一样传递一个计数来振动功能。然后震动10次

    func vibrate(count: Int) {
        if count == 0 {
            return
        }
        AudioServicesPlaySystemSoundWithCompletion(kSystemSoundID_Vibrate) { [weak self] in
            self?.vibrate(count: count - 1)
        }
    }


在使用 UIFeedbackGenerator 的情况下,有一个很棒的库 Haptica


希望对您有所帮助。