【Objective-C】iOSのバブレーションを0.1秒以下や10秒以上と長い時間動作させる方法
iOSのバイブレーションはiOSが提供する5種類ぐらいのバイブレーションしか存在しません。
しかしプライベートAPIを使用することでバイブレーションの長さや強さを自由にカスタマイズすることが可能です。
ただし、プライベートAPIを使用するのでアプリをAppStoreで公開することはできません。
プライベートAPIを使用したアプリは審査でリジェクトの基準になっているからです。
運良く通ったとしてもその後リジェクトされる可能性やアカウント停止処分を受ける可能性もあるため、AppStoreで配信するアプリでのご利用は控えた方が良さそうです。
バイブレーションを0.1秒以下で動作させる
#import "ViewController.h"
// AudioToolbox.frameworkのAudioServicesをインポート
#import <AudioToolbox/AudioServices.h>
// プライベートAPIを使用できるように宣言
void AudioServicesStopSystemSound(int);
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self vibrate];
}
- (void)vibrate {
// バイブレーションを0.1秒だけならす
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
// 0.1秒後にシステムサウンドをストップさせる
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
AudioServicesStopSystemSound(kSystemSoundID_Vibrate);
});
}
@end
バブレーションを10秒以上と長い時間動作させる
#import "ViewController.h"
// AudioToolbox.frameworkのAudioServicesをインポート
#import <AudioToolbox/AudioServices.h>
// プライベートAPIを使用できるように宣言
void AudioServicesPlaySystemSoundWithVibration(int, id, NSDictionary *);
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self vibrate];
}
- (void)vibrate {
// 10秒バイブレーションさせる(ミリ秒)
int64_t vibrationLength = 10000;
// パターンの作成
NSArray *pattern = @[@NO, @0, @YES, @(vibrationLength)];
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
dictionary[@"VibePattern"] = pattern;
dictionary[@"Intensity"] = @1; // バイブレーションの強さ(0.0~1.0)
// バイブレーション開始
AudioServicesPlaySystemSoundWithVibration(kSystemSoundID_Vibrate, nil, dictionary);
}
@end