【Swift4】iOSの短い・長いバイブレーションを繰り返し鳴らす方法【Objective-C】

2020年8月27日

iOSでは強い、弱い、長い、短いなど色々なバイブレーションが用意されています。
今回はバイブレーションを鳴らす方法から、バイッブレーションの種類、さらに繰り返しバイブレーションを鳴らす方法をご紹介します。

  1. iosのバイブレーションを鳴らす
  2. バイブレーションの種類
  3. 繰り返しバイブレーションを鳴らす方

1. iOSのバイブレーションを鳴らす

Swift4

import AudioToolbox

AudioToolbox.frameworkをimportします。

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

バイブを鳴らすにはAudioServicesPlaySystemSoundを使用します。

Objective-C

#import <AudioToolbox/AudioServices.h>

AudioToolbox.frameworkをimportします。

- (void)vibrate {
    AudioServicesPlaySystemSound(4095);
}

バイブを鳴らすにはAudioServicesPlaySystemSoundを使用します。

2. バイブレーションの種類

・AudioServicesPlaySystemSoundkSystemSoundID_Vibrate )
ブーーーという強い・長いバイブレーション

・AudioServicesPlaySystemSound( 1011 )
ブーッブーという強いバイブレーションが2回続く

・AudioServicesPlaySystemSound( 1102 )
プッブッという短いバイブレーションが2回続く

・AudioServicesPlaySystemSound( 1519 )
プッという弱い・短いバイブレーション

・AudioServicesPlaySystemSound( 1520 )
プッという短いバイブレーション、1519よりやや強め

・AudioServicesPlaySystemSound( 1521 )
プップップッという弱い・短いバイブレーションが3回続く

3. バイブレーションを繰り返し鳴らす方法

Swift4

import UIKit

import AudioToolbox

var vibrationCount = 5

class ViewController: UIViewController {

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

    func startVibrateInterval() {
        
        // どのバイブレーションを鳴らすか
        let systemSoundID = SystemSoundID(kSystemSoundID_Vibrate)
        
        // 繰り返し用のコールバックをセット
        AudioServicesAddSystemSoundCompletion(systemSoundID, nil, nil, { (systemSoundID, nil) -> Void in
            
            vibrationCount =  vibrationCount - 1
            
            if ( vibrationCount > 0 ) {
                // 繰り返し再生
                AudioServicesPlaySystemSound(systemSoundID)
            }
            else {
                // コールバックを解除
                AudioServicesRemoveSystemSoundCompletion(systemSoundID)
            }
            
        }, nil)
        
        // 初回のバイブレーションを鳴らす
        AudioServicesPlaySystemSound(systemSoundID)
        
    }
}

Objective-C

#import "ViewController.h"

#import <AudioToolbox/AudioServices.h>

int vibrationCount;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self startVibrateInterval];
}

- (void)startVibrateInterval {
    
    // バイブレーションを繰り返す回数
    vibrationCount = 5;
    
    // どのバイブレーションを鳴らすか
    SystemSoundID systemSoundID = kSystemSoundID_Vibrate;
    
    // 繰り返し用のコールバックをセット
    AudioServicesAddSystemSoundCompletion(systemSoundID,
                                          NULL,
                                          NULL,
                                          vibrateIntervaCallback,
                                          NULL);
    
    // 初回のバイブレーションを鳴らす
    AudioServicesPlaySystemSound(systemSoundID);
}

// バイブレーションが鳴り終わったらコールバックされる関数
void vibrateIntervaCallback(SystemSoundID soundId, void *clientData) {
    
    vibrationCount--;
    
    if (vibrationCount > 0) {
        // 繰り返し再生
        AudioServicesPlaySystemSound(soundId);
    }
    else {
        // コールバックを解除
        AudioServicesRemoveSystemSoundCompletion(soundId);
    }
}

@end