+ ソースコードを書く
さて、次はソースコードを書くんだ。たいした量はないよ。Objective-C が分からない人でも、魔法の呪文だと思って書き写してくれ。
ここでは 2 つのファイルを作る。ヘッダファイルである 'SSTest.h' と、実装側の 'SSTest.m' だ。'File' メニューの 'New File...' を選んでファイルを作ってくれ。タイプは 'Empty File' でオッケーだ。
- SSTest.h
まずはヘッダファイル。これは、スクリーンセイバーモジュールクラスの定義を行うんだ。スクリーンセイバーモジュールは ScreenSaverView を継承することになる。
| SSTest/SSTest.h (created by mkino) |
#import <AppKit/AppKit.h>
#import <ScreenSaver/ScreenSaver.h>
@interface SSTest : ScreenSaverView
{
}
@end
|
これだけだ。これで、ScreenSaverView を継承した、SSTest っていうクラスを用意したことになる。特にメソッドやフィールドは今回は使わない。
- SSTest.m
次は実装側だ。さっきの ScreenSaverView のクラスを実装することになる。
| SSTest/SSTest.m (created by mkino) |
#import "SSTest.h"
@implementation SSTest
- (void)animateOneFrame
{
// Choose a random point
int width = [self frame].size.width;
int height = [self frame].size.height;
NSPoint pt = NSMakePoint(
SSRandomFloatBetween(-width, width),
SSRandomFloatBetween(0.0, height * 2));
float strSize = SSRandomFloatBetween(12.0, 1024.0);
// Make a screen color & rect
NSColor* back =
[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.05];
NSRect rect = NSMakeRect(0, 0, width, height);
// Make a random color
float red = SSRandomFloatBetween(0.0, 1.0);
float blue = SSRandomFloatBetween(0.0, 1.0);
float green = SSRandomFloatBetween(0.0, 1.0);
float alpha = SSRandomFloatBetween(0.0, 1.0);
NSColor* color =
[NSColor colorWithCalibratedRed:red green:green blue:blue alpha:alpha];
// Make a string
NSMutableAttributedString* str =
[[NSMutableAttributedString alloc]
initWithString:@"Say Hello to Mac OS X!"];
[str addAttribute:NSFontAttributeName
value:[NSFont fontWithName:@"Times" size:strSize]
range:NSMakeRange(0, 22)];
[str addAttribute:NSForegroundColorAttributeName
value:color
range:NSMakeRange(0, 22)];
// Draw string
[back set];
[NSBezierPath fillRect:rect];
[str drawAtPoint:pt];
}
@end
|
ここでは animateOneFrame っていうメソッドを実装している。このメソッドは、スクリーンセイバーのアニメーションが行われている間、定期的に呼び出されるんだ。この中に、実際に画面に表示させる処理を書けばいい。
この中でやっていることは非常に簡単で、ランダムにポジションを決めて、ランダムに色を決めて、文字を書く、ってことだ。ちなみに乱数を発生させてる SSRandomFloatBetween() は、ScreenSaver.framework で用意している関数だ。スクリーンセイバー作るのに必須の機能が用意されてるんだ。うーん、分かってらっしゃる。
|