Hatena::ブログ(Diary)

abachibiの日記

2014-05-19

タイル上に並べられた写真をタップして同じ写真を揃えてタイムを競うiOSアプリ「PairGram」をリリースしました

| 23:53 | タイル上に並べられた写真をタップして同じ写真を揃えてタイムを競うiOSアプリ「PairGram」をリリースしましたを含むブックマーク

ゲーム開始時にInstagramのタグを選択してタイル上に並べ、そのタグに関連する写真をタップして揃えていき、

すべて揃えるまでのタイムを競うiOSアプリ「PairGram」をリリースしました。


是非、カワイイワンちんやネコちんの写真におっとりしながらペチペチタップして揃えてみてください。

無料です。


今回は画面デザイン(配置)や画面遷移処理にはStoryBoardを一切使わず、

ゲームエンジンとして一般的に使われているCocos2Dを使って、

シーン(画面)の切り替えやスプライト(写真)を配置しています。

フォントもビット調(っていうのかな?)を使ってレトロゲームみたいに仕上げてみました。


また、タイムなどの計測したデータはCoreDataでは一切保存せず、

NSUserDefaultsでバイナリーをゴロっと保存しています。

メリットはあんまりありません。手軽なくらいです。

要は今まで作ったアプリとは少し違ったアプローチで実装したかっただけです。


f:id:abachibi:20140519234533p:image:w360


もしダウンロード数が増えてきたらGameCenter機能を実装してみようと思います。



2014-04-21

DataFixturesのloadでext_translationが無いよエラーの対処

| 12:33 | DataFixturesのloadでext_translationが無いよエラーの対処を含むブックマーク

Symfony2の備忘メモ。


$ app/console doctrine:fixtures:load

を実行した時に、


[PDOException]
SQLSTATE[42S02] : Base table or view not found: 11046 Table '[DB名].ext_translations' doesn't exit

みたいなエラーが出た場合、いったん以下で更新を掛けたら解決しました。


$ app/console doctrine:schema:update --force

ただし、強制更新なので手動で構成を変えた場合は元に戻るので注意。

2014-04-20

PHPからMySQLにアクセスした時に「connection failed: could not find driver」と出る時の対処メモ

| 00:51 | PHPからMySQLにアクセスした時に「connection failed: could not find driver」と出る時の対処メモを含むブックマーク

PHPインストール時にすっかり抜けてたのでメモ。

ターミナルで以下を実行します。



$ yum install php-mysql


MySQLのPDO関連のドライバーが入ってないのが原因でのエラー。

上記のコマンドでインストールされました。


MacにVirtualBoxをインストールし、やっとゲストOS(CentOS)でさくらVPSと同じ環境を構築できた...。

2014-03-28

時間を進捗ベースでリスト管理できるiOSアプリ「Targets」をリリースしました

| 22:05 | 時間を進捗ベースでリスト管理できるiOSアプリ「Targets」をリリースしましたを含むブックマーク

カテゴリーごとに目標時間を設定し、カテゴリー内のタスクの時間を計測することで

時間ベースの進捗管理ができます。

カテゴリーのカラーも6色から選択できます。

セクション部分のカラーとして使ったり、UITableViewCellの背景色にも透過率を変えて使ったりして、

リストをカラフルにしてみました。


タスクについては実際の時間を簡易ストップウォッチで記録していき、

完了チェックを付けると進捗に反映されます。


技術的には、CoreDataの本を一通り読んで理解したので実装に無駄をなくしました。

(まだあるかもしれませんが、後ほど見直します...)

以下の技術書は本当に良書です。大変お世話になりました...m(_ _)m

iOS Core Data徹底入門

iOS Core Data徹底入門


それと、UITableViewのセクション部分のタップ処理をどう実装するかをいろいろとググって解決しました。

アプリの内容は大変シンプルなものですが、今までに実装したアプリでは使ってなかったUICollectionViewや、

セクション部分のみ表示するようにしたり個人的には壁に打ち当たりながらも何とか進めてきました。


初期の実装では、ViewDeckを使ってみたり(GMailアプリにある左側にスライドして出る仕組み)、

レベルと経験値の概念を入れてみたりしたのですが、コンテンツ不足のためお蔵入りになってしまいました。

いつかはリベンジしたい!

f:id:abachibi:20140414175000p:image:w300


ということで、当アプリをぜひ使ってみて下さい。

2013-03-17

NSUserDefaultsを使ってデータを保存

| 11:13 | NSUserDefaultsを使ってデータを保存を含むブックマーク

アプリ内でデータを保存する場合にCoreDataを使うという手もありますが、

テーブル定義が〜とか定義を変更した時にマイグレーション処理が〜など色々とめんどいので、

代わりにNSUserDefaultsを使って比較的楽に保存する方法があります。


NSUserDefaultsは、iPhoneiPadのアプリの設定画面の情報を

取得したり設定できるクラスです。


二郎系アプリでは設定画面は用意していませんが、

NSUserDefaultsを使ってお気に入り機能を実装しました。

お気に入り登録したお店情報リスト(NSData)をまるっと保存しています。


・保存時

//お店情報リスト
NSArray *shopList = [NSArray arrayWithObjects:@"お店1", @"お店2", @"お店3", nil];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//お店情報リスト(NSArray)をデータ化(NSData)
NSData *shopData = [NSKeyedArchiver archivedDataWithRootObject:shopList];
//shopListキーを指定してデータを保存
[defaults setObject:shopData forKey:@"shopList"];
if (![defaults synchronize]) {
	NSLog(@"defaults setObject error");
	return;
}

・取得時

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//shopキーのデータを取得
NSData *shopData = [defaults dataForKey:@"shopList"];
//データをリスト化
NSArray *shopList = [NSKeyedUnarchiver unarchiveObjectWithData:shopData];