MacOSX 10.5 から手軽にスライドショーができる IKSlideshowが加わった。
IKSlideshow Class Reference
このクラスを使うとおなじみのスライドショーが数行のコードで作れてしまう。
さっそくサンプルを作ってみた。
サンプル:IKSSample.zip
ボタンを押すと壁紙(/Library/Desktop Pictures/*.jpg)のスライドショーが始まる。
書いたコードは MyControllerクラスのみ。
MyController.h
#import
#import
@interface MyController : NSObject{
NSMutableArray *_image_list;
}
-(IBAction)start:(id)sender;
@end
MyController.m
@implementation MyController
-(id)init .....(1)
{
self = [super init];
NSString* path = @"/Library/Desktop Pictures";
NSArray* array = [[NSFileManager defaultManager] directoryContentsAtPath:path];
_image_list = [[NSMutableArray alloc] init];
for (NSString* name in array) {
if ([[name pathExtension] isEqualToString:@"jpg"]) {
[_image_list addObject:[path stringByAppendingPathComponent:name]];
}
}
return self;
}
-(IBAction)start:(id)sender ...(3)
{
[[IKSlideshow sharedSlideshow]
runSlideshowWithDataSource:(id)self
inMode:IKSlideshowModeImages
options:nil];
}
- (NSUInteger)numberOfSlideshowItems ...(2a)
{
return [_image_list count];
}
- (id)slideshowItemAtIndex: (NSUInteger)index ....(2b)
{
return [_image_list objectAtIndex:index];
}
@end
(1) インスタンス初期化時(init)に /Library/Desktop Pictures/*.jpg のパス一覧を作り _image_listへ格納しておく。
(2a)(2b) IKSlideshowはスライドショーで表示する内容をデータソースから取得する。データソースは IKSlideshowDataSourceプロトコルで定義されている。画像数を返す numberOfSlideshowItems と 画像データ(ファイル名)を返す slideshowItemAtIndex: の2つを最低限実装する必要がある。
(3) ボタンが押されたら IKSlideshow のインスタンスへ メッセージ runSlideshowWithDataSource:inMode:options: を送る。するとスライドショーが始まる。
コードはこれだけ。データソースで提供するデータはファイル名でも良いし、NSImageでも良い。
IKSlideshow.h 抜粋
// export an item to the given application
// The item can be:
// - NSImage *
// - NSString * (path)
// - NSURL *
// - an NSArray of NSImage / NSString / NSURL
+ (void) exportSlideshowItem: (id) item
toApplication: (NSString *) applicationBundleIdentifier;
@end
ImageKitは他にもいろいろと面白いクラスがある。今回の IKSlideshowも含めてプログラミングガイドが ADCで出ている。
Introduction to Image Kit Programming Guide
ADCのサンプルプログラム
IKSlideshowDemo
木下さんによる紹介もあった。
LeopardのImage KitでiPhotoを作る--一手間加えてiPDF?も作っちゃおう
- - - -
これだけ簡単に利用できると画像や PDFを使うアプリでは今後ついてて当たり前の機能になるな。