iPhoneアプリを作成してみた。まだ途中だけど。
ベルをタップするとチンと音がする。今んとこそれだけ。画面上部の時間表示は、今はただの飾り。
完成形のイメージは、設定した時間がくれば自動で音が鳴るという、研究発表なんかのプレゼン時に使う感じのアプリ。
View-Based Applicationのテンプレートから作り始めて、BellViewController.hがこんな感じ。
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface BellViewController : UIViewController {
SystemSoundID soundID;
}
@property SystemSoundID soundID;
- (IBAction)buttonPressed:(id)sender;
@end
ベル音を出すためにSystem Sound Servicesを使うけん、AudioToolbox.hをインポート。さらにAudioToolboxフレームワークが必要になるけん、XcodeウィンドウのFrameworksフォルダで右クリックして「追加」→「既存のフレームワーク...」から「AudioToolbox.framework」を追加。
ベルをタップしたときに呼び出されるんが、buttonPressed:メソッド。soundIDにはタップ時に再生される音の情報が入る。
BellViewController.mがこんな感じ。テンプレから変わってないとことかは適当に端折ってます。
#import "BellViewController.h"
@implementation BellViewController
@synthesize soundID;
- (IBAction)buttonPressed:(id)sender
{
AudioServicesPlaySystemSound(soundID);
}
- (void)viewDidLoad {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Glass" ofType:@"aiff"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
}
@end
あらかじめ再生する音声ファイルをXcodeにドラッグ&ドロップしてプロジェクトに追加しておく。
viewDidLoad:で再生するベル音の準備をする。NSBundleクラスのmainBundleクラスメソッドは、実行しているアプリのメインバンドルに該当するNSBundleオブジェクトを作成する。そのNSBundleオブジェクトにpathForResource:ofType:メソッドを適用することで、メインバンドル内にあるファイル、ここでは再生する音声ファイルのパスを得る。
得られたパスを使ってAudioServicesCreateSystemSoundID関数を呼ぶことで、soundIDに音声ファイルの情報を格納することができる。
あとはベル画像がタップされた際に呼ばれるメソッドbuttonPressed:でsoundIDを引数にとったAudioServicesPlaySystemSound関数を使うことで音声ファイルの再生ができる。
Interface Builder側では、BellViewController.xibにUIButtonをひとつ配置し、そのUIButtonからFile's OwnerまでControl+ドラッグして、配置したUIButtonとbuttonPressed:メソッドを結びつける。これでこの配置したUIButtonをタップした際にbuttonPressed:メソッドが呼ばれるようになる。
ベル画像を適当に用意し、Xcodeのウィンドウにドラッグ&ドロップしてプロジェクトに追加する。配置したUIButtonのInspectorウィンドウから「Type」を「Custom」にし、「Image」欄で追加した画像ファイルの名前を指定する。「Hilighted State Configuration」内の「Image」欄を別の画像に変えると、タップ中の画像を別のものにできる。
このままでは、ベル画像をタップしたときに画像が暗転してしまうので、「Highlighted Adjusts Image」のチェックを外しておく。
これでビルドして実行する。ベル画像をタップしたら音がなるアプリのでき上がり。以上、現時点での簡単な覚え書き。