Как заставить вибрировать в два раза больше моего iphone, когда я нажимаю на кнопку? IOS-быстроногих Xcode

Я ищу, чтобы вибрировать в два раза больше моего iphone, когда я нажимаю на кнопку (как вибрация смс оповещения)

С AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))Я получаю только одну нормальную вибрацию, но хочу две шорты:/.

Кто-то может мне помочь? Спасибо

3 ответа

Решение
#import <AudioToolbox/AudioServices.h>


AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))

Это быстрая функция... Смотрите эту статью для подробного описания.

Обновление для iOS 10

В iOS 10 есть несколько новых способов сделать это с минимальным количеством кода.

Метод 1 - UIImpactFeedbackGenerator:

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

Способ 2 - UINotificationFeedbackGenerator:

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

Метод 3 - UISelectionFeedbackGenerator:

let feedbackGenerator = UISelectionFeedbackGenerator()
feedbackGenerator.selectionChanged()

Вот что я придумал:

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), и оттуда я могу контролировать, сколько раз телефон будет вибрировать. Я использовал переключатель в этом случае, но вы могли бы использовать, если еще, тоже. Просто установите счетчик для подсчета каждый раз, когда вызывается функция.

Если вы хотите вибрировать только два раза. Вы можете просто..

    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


Надеюсь, поможет.

Другие вопросы по тегам