
tsutsumi
鎌倉でiPhoneアプリつくってます。つくったもの:EncountMe、戦え!マドリ、とびでるカメラ、恋愛偏差値、世バレシーブ等々
Twitter:@shu223


鎌倉でiPhoneアプリつくってます。つくったもの:EncountMe、戦え!マドリ、とびでるカメラ、恋愛偏差値、世バレシーブ等々
Twitter:@shu223

先日、『KOF ENCOUNTER』という、すれちがい対戦バトルゲームをリリースしました。
実際に街ですれちがった人とバトルが発生して、経験値がたまってキャラがどんどん強くなっていく!というゲームです。
無料! かつ アカウント登録とか一切必要なし! ですので、ぜひぜひお試しください!!
http://itunes.apple.com/jp/app/the-king-of-fighters-encounter/id449518556?mt=8
で、このアプリ、ゲームが進めていくと手持ちのキャラが増えていったり、地域ごとのランキングでのし上がっていったり、といった楽しさがあります。
TwitterとかFacebookをウォッチしてると、わざわざスクリーンショットを自分で撮影してアップしている人が多いことに気づきました。
そこで、『自分の手持ちキャラクターを一覧できる画面』と『自分がランクインしている地域のランキング画面』に、
「スクリーンショットを自動撮影してFacebookに投稿する機能」
をつけました。
今回はこの機能の実装方法についてご紹介させていただきます。
+ (UIImage *)screenshotWithView:(UIView *)view
{
CGSize imageSize = [view bounds].size;
if (NULL != UIGraphicsBeginImageContextWithOptions)
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
else
UIGraphicsBeginImageContext(imageSize);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, [view center].x, [view center].y);
CGContextConcatCTM(context, [view transform]);
CGContextTranslateCTM(context,
-[view bounds].size.width * [[view layer] anchorPoint].x - view.frame.origin.x,
-[view bounds].size.height * [[view layer] anchorPoint].y - view.frame.origin.y);
[[view layer] renderInContext:context];
CGContextRestoreGState(context);
// Retrieve the screenshot image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
撮影したいviewを引数に渡すとUIImageを返すシンプルなメソッドとなっています。
よろしければそのままご使用ください!
(位置合わせのところはケースによっては修正が必要かもしれません)
KOFでは広告部分を除外するためviewを撮影対象としていますが、keyWindow全体を撮影したい場合は、こんな感じになります。(一部抜粋)
for (UIWindow *window in [[UIApplication sharedApplication] windows])
{
if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen])
{
CGContextSaveGState(context);
CGContextTranslateCTM(context, [window center].x, [window center].y);
CGContextConcatCTM(context, [window transform]);
CGContextTranslateCTM(context,
-[window bounds].size.width * [[window layer] anchorPoint].x,
-[window bounds].size.height * [[window layer] anchorPoint].y);
[[window layer] renderInContext:context];
CGContextRestoreGState(context);
}
}
- (void)uploadPhoto:(UIImage *)image caption:(NSString *)caption {
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
image, @"picture",
nil];
if ([caption length] > 0) {
[params setObject:caption forKey:@"caption"];
}
[facebook requestWithMethodName:@"photos.upload"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
}
認証部分やdelegateメソッドなど前後部分は割愛しています。
このあたりは私の個人ブログでも記事を書いているので、よろしければご参照ください!
・カメラアプリにFacebookへの写真投稿機能をつける
・Facebook iOS SDK を使用して近況の投稿やプロフィール取得を実装する
それではみなさま、『KOF ENCOUNTER』で楽しいすれちがいライフを!!
先日、『KOF ENCOUNTER』という、すれちがい対戦バトルゲームをリリースしました。 実際に街ですれちがった人とバトルが発生して、経験値がたまってキャラがどんどん強くなっていく!というゲームです…

みなさまこんにちは!tsutsumiと申します。
突然ですが、こちら、先日(2010年12月4日)とある勉強会にて発表した際の資料です。
iPhone SDKで利用できる音声認識ライブラリ(Pocket Sphinxのラッパー)VocalKitについて紹介しています。
中身を読むのが面倒な方のために、下記に内容を抜粋します!
[vk startListening];
[vk postNotificationOfRecognizedText];
me M IY
encourage EH N K ER IH JH
encourage(2) IH N K ER AH JH
NSDictionary *dict = [notification userInfo]; NSString *phrase = [dict objectForKey:VKRecognizedPhraseNotificationTextKey]; NSNumber *score = [dict objectForKey:VKRecognizedPhraseNotificationScoreKey];
自分で作るとかなり大変な音声認識機能ですが、VocalKitを使うと超簡単にiPhoneに実装できてしまうので、ぜひぜひお試しください!
みなさまこんにちは!tsutsumiと申します。 突然ですが、こちら、先日(2010年12月4日)とある勉強会にて発表した際の資料です。 VocalKitについて View more prese…

みなさまこんにちは、Google+の招待を心待ちにしているtsutsumiと申します!
今日は_level0では久しぶりのiOSの話題でございます。
「なるべくUIViewを使わず描画する」とか、「nibを使わない」とか、iOSアプリの動作を軽快にするためのTipsは数あれど、実際どれぐらい効果あるんだろう、ってことを調べたい、でもInstrumentsはめんどくさい、ってことでメモリ消費量やUIViewの数など、「負荷を示すパラメータ」をリアルタイム表示するクラスを作りました。
(イメージとしてはAS3でいうところのStats)
同梱のサンプルコードを実行すると、こんな感じで表示されます。(左上の黒いラベルがStats)
パラメータ内訳は後述しますが、メモリを約16MB使用し、ビューが合計5つ(UIView、UIButton、UIButton上のUILabel、UIImageView、Stats)になっていることがわかります。
また、draw imageボタンを連打するとCPU負荷の値が若干上がることも確認できます。
※シミュレータでの実行結果です。
self.stats = [[[Stats alloc] initWithFrame:CGRectMake(10, 30, 100.0, 60.0)] autorelease]; [self.view addSubview:stats];
よろしければぜひご利用ください!
みなさまこんにちは、Google+の招待を心待ちにしているtsutsumiと申します! 今日は_level0では久しぶりのiOSの話題でございます。 「なるべくUIViewを使わず描画する」とか、「n…

はじめまして、この7月にインタラクティブデザイン課(旧閃光部)にジョインしました、堤と申します! フロントエンド(iPhoneアプリ)開発を担当することが多いので、技術部からコンバートしてまいりました…