2011年4月9日土曜日

アルバム一覧をサムネイル画像で表示したい

-やりたいこと
Picasaアルバムのように、アルバム一覧をサムネイル画像で表示したい

-利用したライブラリ
Three20 1.0.4

Three20 の TTThumbsViewController を使えば、写真一覧をサムネイルで表示→任意の写真をクリック→写真を表示する は、簡単に実装できる。しかし、ここでは、「写真一覧」の前に、Picasaアルバム のようなアルバム一覧のサムネイルを表示したい。

-実装したい処理の手順
--before--
1
写真一覧をサムネイルで表示
2
任意の写真をクリック
3
写真の表示

--after--
1
アルバム一覧をサムネイルで表示

2
選択したアルバムが持つ写真をサムネイルで一覧表示
3
任意の写真をクリック
4
写真の表示

-------------------------------------
-Three20UI.xcodeproj でどんな実装をしているのか確認する

--任意の写真を選択したあとに呼び出されるメソッド
---メソッド名
- (void)thumbsTableViewCell:(TTThumbsTableViewCell*)cell didSelectPhoto:(id)photo;
---定義ファイル名
TTThumbsTableViewCellDelegate.h

--上記の関数を実装しているファイル名
TTThumbsViewController.m

- (void)thumbsTableViewCell:didSelectPhoto: メソッドはデリゲートメソッドなので、自分のメソッド内でこのメソッドをデリゲートすればいいのかなと考えたが、次の処理(写真一覧をサムネイルで表示する)では Three20 に処理を任せるので、superクラス(TTThumbsViewController)の処理も残しておきたい。というわけで、オーバーライドするのが正解。
-------------------------------------
-実装例

MyViewController.m
- (void)picasaWebDataSourceFetchAlbumCompleted:(PhotoSet *)dataSource{

 MyThumbsViewController *thumbs = [[MyThumbsViewController alloc] initForPhotoSource:dataSource 
                withPicasaWebDataSource:self.picasaDataSource];

 [self.navigationController pushViewController:thumbs animated:YES]; // この後、Three20 の処理に移る
}


MyThumbsViewController.m
- (void)thumbsTableViewCell:(TTThumbsTableViewCell*)cell didSelectPhoto:(id)photo {
 // 自分のメソッド内で thumbsTableViewCell:didSelectPhoto: をオーバーライドして処理を Three20 から自分の実装に処理を戻す
 
 NSInteger index = photo.index; // 選択したアルバムのインデックスを取得しておく
 [self.picasaDataSource fetchSelectedAlbum:index]; // Picasa Web Albums Data API の fetch 処理を呼び出す
}

この後、TTThumbsViewController で初期化したオブジェクトを pushViewController: メソッドの引数に設定する。そして、選択したアルバムがもつ写真一覧をサムネイルで表示する処理を Three20 でやってもらう

MyThumbsViewController.m
- (void)picasaWebDataSourceFetchAlbumPhotosCompleted:(PhotoSet *)dataSource{
 TTThumbsViewController *thumbs = [[TTThumbsViewController alloc] init];
 thumbs.photoSource = dataSource;
 
 [self.navigationController pushViewController:thumbs animated:YES];
 
}

0 件のコメント:

コメントを投稿