トップページ > ドキュメント > Cocoa Application
さて、アプリケーションは動作するようになりましたが、Leopard対応ソフトらしくユーザーインターフェースにアニメーション効果を付け加えてみたいと思います。
今回は、加算を実行した時に、答えのテキスト・フィールドに「ぼかし」を使ったアニメーションかけてみます。
まず、Calculator.hにインスタンス変数を追加します。
@interface Calculator : NSObject
{
NSInteger value1;
NSInteger value2;
NSInteger answer;
IBOutlet NSTextField* answerField;
}
IBOutletは、InterfaceBuilder上で他のオブジェクトを参照可能であることを表すマークです。ソースコードを編集して保存すると、すぐにInterfaceBuilderにそれが反映されます。
つぎに、Calculatorオブジェクトから答えテキスト・フェールドへ、Controlキーを押しながらドラッグして、answerField変数と接続します。
これで、answerField変数に、自動的にNSTextFieldオブジェクトの参照が代入されるようになりました。
オブジェクトの接続が終わったら、次に答えテキスト・フィールドを選択して、エフェクト・インスペクタを開きます。ここで、エフェクトをかけるText Fieldにチェックを入れて、Content Filtersでガウスブラーを選択し、初期値として半径0.00を設定します。
以上でNibファイルの修正は完了です。Xcodeに戻って、Calculator.mファイルを以下のように編集します。
#import "Calculator.h" #import <QuartzCore/QuartzCore.h> @implementation Calculator @synthesize value1; @synthesize value2; @synthesize answer; - (IBAction)add:(id)sender { [[answerField layer] setValue:[NSNumber numberWithFloat:5.0] forKeyPath:@"filters.myEffect.inputRadius"]; self.answer = self.value1 + self.value2; [[answerField layer] setValue:[NSNumber numberWithFloat:0.0] forKeyPath:@"filters.myEffect.inputRadius"]; } - (void)awakeFromNib { CIFilter* filter = [[answerField contentFilters] lastObject]; filter.name = @"myEffect"; } @end
awakeFromNibメソッドは、Nibファイルのロード直後に呼ばれるメソッドで、ここでユーザーインターフェース関して、初期化処理を行うことができます。IBOutletで指定した変数は、initメソッドによるオブジェクトの初期化時点では、まだ値が代入されていないので、これに関連する初期化はawakeFromNibメソッド内で行います。今回はここで、InterfaceBuilderで設定したガウスブラー・エフェクトに、"myEffect"と名前を設定します。
add:メソッド内には、実際にアニメーションさせるためのコードが追加されています。しかし、やっていることは単純で、ガウスブラーの半径値を5.0に設定してから、加算処理を行い、再度0.0に設定しなおしているだけです。たったこれだけですが、ガウスブラーの半径値が5.0から0.0へ0.25秒かけて滑らかに変化します。
setValue:forKeyPath:メソッドのパラメータである、@"filters.myEffect.inputRadius"がガウスブラーの半径値を表すキーです。最初のキーfiltersがテキスト・フィールドのContents filter、2番目のmyEffectがawakeFromNibで設定したガウスブラー名、3番目のinputRadiusが半径値となっています。