インターフェイスファイルを修正する
全てスーパークラスへ移してしまったのでOscillatorViewには何も残りません。インスタンス変数とメソッドの宣言を全て削除します。スーパークラスのインターフェイスファイルをインポートし、スーパークラスのクラス名を変更すれば完成です。
//
// OscillatorView.h
// RepeatingMotifGenerator
//
// Copyright NovemberKou 2008. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "BezierPathView.h"
@interface OscillatorView : BezierPathView
{
}
@end
用意したメソッドをオーバーライドする
keyPathはX軸のOscillatorViewが"selection.x.bezierPath"を、Y軸のOscillatorViewが"selection.y.bezierPath"を返す様にします。したがって自分がX軸のOscillatorViewなのか、Y軸のOscillatorViewなのかを見分ける方法を用意しないといけません。
tagが使えるとよいのですが、これは残念ながらNSControlで用意されているものなのでNSViewでは使えません。したがってInterface Builderでカスタムビューを配置してもtagを設定できる様にはなりません。
正確に言うとNSViewにもtagはあるのですが、Interface Builderのインスペクタで設定できる様になっていないと言った方がよいでしょうか。カスタムビューのタグを設定したいというニーズはあると思うのですが、なぜサポートしないのでしょう?
しかたがないのでInterface Builderで設定できるものが何かないか探した結果、ツールチップを使う事にしました。ツールチップの最初の一文字でX軸のOscillatorViewなのか、Y軸のOscillatorViewなのかを見分ける事にします。isXViewフラグもここで設定します。
ローカライズの時にうっかりいじると予期しない動作になるので、あまりいい方法ではないと思うのですが…
//
// OscillatorView.m
// RepeatingMotifGenerator
//
// Copyright NovemberKou 2008. All rights reserved.
//
#import "OscillatorView.h"
#define AMPLITUDE_MAX 100
@implementation OscillatorView
#pragma mark -
#pragma mark Methods to be overrided
- (NSString *)keyPath
{
NSString *viewName;
viewName = [[self toolTip] substringWithRange:NSMakeRange(0,1)];
isXView = [viewName isEqualToString:@"x"];
return [NSString stringWithFormat:@"selection.%@.bezierPath",viewName];
}
- (float)pathHeight
{
return AMPLITUDE_MAX*2.0;
}
@end

ホーム
前へ