2011年2月11日金曜日

Cameramatic 1.1.5 アップデートのお知らせ

12月のリリース以来このブログでは何の報告もしていませんでしたが、何度かアップデートを重ねて先日 Cameramatic 1.1.5 をリリースしました。



リリース時点では「必要最低限な機能のみ」を搭載してリリースしようという方針だったので必ずしも充実したアプリではありませんでしたが、その後のアップデートでいくつか追加した機能があるので、めぼしいものをここにまとめておきます。



+++ 画像アルバムの画像を利用する

Cameramaticはトイカメラアプリなので、アプリで写真を撮影することを前提にしています。
なので、リリース当初はiPhoneの画像アルバムから写真を選択する機能を付けていませんでした。

リリース後「カメラロールの写真を使いたい!」という要望が多かったので、アップデートで機能を追加しました。

アルバムのアイコンをタップ

写真アルバムを選択

写真を選択

Cameramaticは正方形の写真のみ対応しています。
取り込む写真が正方形ではない場合、ピンチで切り抜く箇所を選択してください。

保存」ボタンをタップするとLight Boxに写真を保存します。
Light Boxに保存された写真は何度でもフィルターやフレームを変更することが可能です。



+++ Twitter, Flickr, Facebookに写真をアップロードする


リリース当初もTwitterFacebookのアップロードは可能でした。
その後のアップデートでFlickrに対応。
さらにアップロード機能の改善をしています。

Flickrのアップロード画面です。

++ アップロード画像のリサイズ
サムネイル画像の下に「1930x1930」とありますが、これはアップロードする画像のサイズです。
この部分をタップするとアップロードする画像のサイズを変更できます。

++ バックグラウンドで画像のアップロード

3G回線を利用して大きな画像をアップロードすると時間が相当かかります。
この時間を利用してメールやTwitterをチェックできたら便利ですよね。
Cameramaticは画像アップロード時にバックグラウンド処理をサポートしました。
アップロード中に例えばメールアプリを起動しても、裏側でアップロードを実行し続けます。

この状態でメールアプリを起動してもアップロードは続行します。



+++ EXIF / 位置情報 対応

EXIF情報を保存&確認できるようになりました。

「i」ボタンをタップ

位置情報が保存されている場合は地図で確認できるようになっています。

初期状態では位置情報は自動で取得しないようになっています。
位置情報を自動で取得するには「設定」から位置情報サービスをオンにしてください。




+++ フィルター & フレーム追加

フィルターやフレームをいくつか追加しています。
下のブログの記事でレビューしていただいています。

Life in LoFI:
Nox Dineen’s Cameramatic Filter Grid
Cameramaticで使えるフィルターのサンプル写真集です。
作者とは無関係ですが感謝!

Cameramatic 1.1.5 Update Released. Includes New Filters and Frames

Appotography
Cameramatic: One Of The Best Toy Cameras On The iPhone


FlickrのCameramaticグループでもCameramaticを利用して撮影/加工されて写真をみることができます。

2011年2月6日日曜日

Objective-CのNSArrayやNSDictionaryに色々な値を格納する方法

NSArrayNSDictionaryには NSIntegerCGFloatBOOLなどのプリミティブな型をそのままでは格納できません。
だけどNSNumberでラップしてやれば格納可能です。

NSArray *list = [NSArray arrayWithObjects:
[NSNumber numberWithInt:100],
[NSNumber numberWithFloat:0.66],
[NSNumber numberWithBool:YES],
nil];

NSLog(@"int: %d", [[list objectAtIndex:0] intValue]); // 100
NSLog(@"float: %f", [[list objectAtIndex:1] floatValue]); // 0.66
NSLog(@"bool: %d", [[list objectAtIndex:2] boolValue]); // 1 (YES)


ちなみにNSArrayNSDictionaryにはクラス(Class)セレクタ(selector)も格納することができません。
その場合はリフレクションを利用。

NSDictionary *dict = [NSDictionary dictionaryWithObject:
  @"MyViewController", @"className", // MyViewController1というクラス名
  @"mySelector", @"selectorName", // mySelectorというセレクタ名
nil];

Class className = NSClassFromString([dict objectForKey:@"className"]);
UIViewController *myViewController = [[className alloc] init]; // MyViewControllerの初期化

SEL selector = NSSelectorFromString([dict objectForKey:@"selectorName"]);
[self performSelectorOnMainThread:selector
                       withObject:nil
                    waitUntilDone:NO]; // mySelectorの実行