[Swift]iPhoneを振動させる

iPhoneのバイブレーション機能を用いるには?

システムサウンドにバイブレーションさせるものがあるのでそれを用います。

System Sound Services Reference

• AudioToolboxをimportしたうえで、バイブレーション用サウンドを指定して鳴らすことで、振動させることができます。

import AudioToolbox
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)

バイブレーションのサンプル

Startボタンを押すと3秒間隔で振動し続けるサンプルを作成しました。(Stopボタンを押すと止まります)

Single View Applicationで開発。

Main.storyboardにStartボタンを配置
ss 2015-11-13 17.09.33

StartボタンとViewController.swift間をActionで結びつける

    @IBAction func pushStartOrStopBtn(sender: AnyObject) {

    }

Startボタンが押されると、Timerが起動します。
Timerは3秒間隔で、システムサウンドによるバイブレーションを実行しています。
また、ボタンは押されるごとに、”Start”と”Stop”の表記を切り替えています。
Stopボタンが押されると、Timerを無効にします。

ViewController.swift

//
//  ViewController.swift
//  Vibration Demo
//
//  Created by KUWAJIMA MITSURU on 2015/11/13.
//  Copyright © 2015年 nackpan. All rights reserved.
//

import UIKit
import AudioToolbox

class ViewController: UIViewController {
    
    var timer = NSTimer()
    var nowPlaying = false

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func pushStartOrStopBtn(sender: AnyObject) {
        let btn = sender as! UIButton
        if nowPlaying {
            pushStopBtn(btn)
        } else {
            pushStartBtn(btn)
            
        }
    }
    
    func pushStartBtn(btn: UIButton) {
        timer = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: "vibrate:", userInfo: nil, repeats: true)
        timer.fire()
        
        
        btn.setTitle("Stop", forState: UIControlState.Normal)
        
        nowPlaying = true
        
    }

    
    func vibrate(timer: NSTimer) {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
    }
    
    func pushStopBtn(btn: UIButton) {
        
        timer.invalidate()
        
        btn.setTitle("Start", forState: UIControlState.Normal)
        
        nowPlaying = false
        
    }
}

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください