トップページドキュメント > 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.00.25秒かけて滑らかに変化します。

setValue:forKeyPath:メソッドのパラメータである、@"filters.myEffect.inputRadius"がガウスブラーの半径値を表すキーです。最初のキーfiltersがテキスト・フィールドのContents filter、2番目のmyEffectawakeFromNibで設定したガウスブラー名、3番目のinputRadiusが半径値となっています。

Copyright(C)2001-2010 STRIPE-NET. All Right Reserved.