如何让 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
希望对您有所帮助。
我搜索 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
希望对您有所帮助。