カードの裏に隠された数字を当てるパズルゲーム『UNLOCK!!』が本日リリースされました。


ゲームを開始すると

2013-04-27 23.42.13.png

このような画面が表示されます。

上にある3枚のカードに0〜9の数字が隠されています。重複はありません。

カードの下にあるハートはチャレンジできる回数です。

10回誤った時点でゲームオーバーとなります。10回答の間に正しい答えを導きだしましょう。


まず適当に

2013-04-27 23.42.30.png

「459」と入力してみました。

UNLOCKボタンを押すと結果が表示されます。

2013-04-27 23.42.33.png

どうやら正解ではなかったようです。

◎が1つ、●が1つと表示されています。

◎は数字と位置両方が合っているものが1つあるという意味です。

●は数字が合っているが、位置が間違っている事を意味しています。

あと1つの数字はどちらにも含まれていませんので、そもそも回答に含まれないようです。


これまでの回答は下のリストに結果とともに表示されますので、次の回答のヒントとしましょう。

1回目の回答をヒントとして、次は

2013-04-27 23.42.40.png

「405」と入力したところ、◎が3つ表示されました。

すべての数字を正解すると、鍵が外れます。

2013-04-27 23.42.44.png

そしてすべての鍵を外す事に成功すると、ステージクリアとなります。

2013-04-27 23.42.48.png

ステージが進むごとにカードが増えていき、難度が増します。

無料でダウンロードできますので、ぜひ全20ステージ制覇にチャレンジしてください!


知的脱出ゲーム『UNLOCK!!』アンロックは、以下のリンクからダウンロードできます。

UITabBarControllerに一定数以上のタブを登録した場合、すべてのタブが表示される訳ではなく、一番右にある項目が自動的に「その他」となります。
その他タブをタップすると、表示されていないタブの一覧に遷移します。
2013-03-13 18.01.23.png
その他一覧を表示中に一覧項目に該当するタブのタイトルを変更した場合(例えばPage.5をPage.99に変更)、一覧には反映されません。
今回はこのようなケースで一覧に正しく反映させる為の処理を紹介します。

その他一覧が存在する時にUITabbarControllerのsubviewsを検索すると、「UIMoreListController」というクラスが見つかります。
このクラスがその他一覧となりますので、インスタンスに対して一覧の更新をコールする事で仕様を満たす事が可能です。

以下コードとなります。
 ※selfがUITabbarControllerを継承するクラスである事を前提としていますので、適宜修正して下さい。

// その他一覧を更新する

for (UIViewController* viewController in self.moreNavigationController.viewControllers) {

    if ([viewController isKindOfClass:NSClassFromString(@"UIMoreListController")]) {

        if ([viewController.view isKindOfClass:[UITableView class]]) {

            [((UITableView*)viewController.view) reloadData];

            break;

        }

    }

}


同じ要領でその他一覧をカスタマイズする事も可能です。
その他一覧はタブが変更されるごとに生成され直すようなので、カスタマイズする場合はその点にご注意下さい。
RelationalVoiceRecorder(ボイスレコーダー)とPerfect Listener(ボイスプレーヤー)はお互いの相性を考えて設計されておりましたが、今回のバージョンアップで両者にアプリ連携機能が追加された事により、さらに相性が良くなりました。

RelationalVoiceRecorderとPerfect Listenerを使った場合、どのように便利であるか、一連の流れを紹介しようと思います。
会議でも授業でも良いですので、「後でもう一度聴きなおしたい」状況を想定して下さい。

まずRelationalVoiceRecorderを立ち上げ、録音を始めましょう。
2013-03-01 19.01.43.png
録音開始は、起動後画面の下中央にある録音ボタンをタップするだけです。

必要な時間録音できたら、停止ボタンをタップします。
2013-03-01 19.07.19.png
録音を終了すると、ライブラリー画面が表示されます。
一番先頭(一番上)の項目が最新の録音ファイルですので、その項目右側にあるアクションボタンをタップしましょう。
2013-03-01 19.10.07.png
アクションボタンをタップするとメニューが開きます。
メニューの2ページ目にアプリ連携機能がありますので、メニューの上で左方向にフリックして2ページ目を表示させます。
2013-03-01 19.12.32.png
メニュー2ページ目にある「アプリ連携機能」ボタンをタップすると、録音ファイルを送る事ができるアプリ一覧が表示されます。
聞き取りに特化したボイスプレーヤーアプリである「Perfect listener」を選択します。
 ※Perfect listenerがインストールされていない場合は表示されませんので、注意して下さい。
2013-03-01 19.15.56.png
Perfect Listenerが起動し、自動的に録音ファイルが読み込まれます。
後はPerfect Listenerの機能を活用し、議事録の作成や勉強にお役立て下さい!
2013-03-01 19.19.40.png

今回紹介しました2つのアプリは以下からダウンロードする事ができます。
今後さらに便利にしていく予定ですので、是非ご利用下さい。
350円
(2013.03.01時点)
posted with ポチレバ
UITabBarControllerのタブは、ページ数に応じてレイアウトが等分されるという非常に良く作られたUIです。
ただタイトルが長かった場合については考えられていないようで、下図の様になってしまいます。

長いタイトルを設定します:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

NSMutableArray* viewList = [NSMutableArray arrayWithCapacity:3];

for (NSInteger i = 0; i < 3; i++) {

UIViewController* viewController = [[[UIViewController alloc] init] autorelease];

viewController.title = @"クラムボンはかぷかぷわらったよ。";

[viewList addObject:viewController];

}

UITabBarController* tabBarController = [[[UITabBarController alloc] init] autorelease];

tabBarController.viewControllers = viewList;

self.window.rootViewController = tabBarController;

    return YES;

}


実行すると:
2013-02-26 12.59.28.png
タイトルが隣のタブと重なってしまいました。

タイトルをユーザの入力に任せる場合など、少し使い辛い仕様ですね。
今回はタイトルが長過ぎた場合(タブの幅を超える場合)に溢れない様にする為の方法をご紹介します。

先ほどのコードにタイトルラベルの幅を調整する為の処理を追加します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

NSMutableArray* viewList = [NSMutableArray arrayWithCapacity:3];

for (NSInteger i = 0; i < 3; i++) {

UIViewController* viewController = [[[UIViewController alloc] init] autorelease];

viewController.title = @"クラムボンはかぷかぷわらったよ。";

[viewList addObject:viewController];

}

UITabBarController* tabBarController = [[[UITabBarController alloc] init] autorelease];

tabBarController.viewControllers = viewList;

self.window.rootViewController = tabBarController;

// ーーーー ここから追加 ーーーー

NSArray* subviews = tabBarController.tabBar.subviews;

for (UIView* view in subviews) {

if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

for (id item in view.subviews) {

if ([item isKindOfClass:NSClassFromString(@"UITabBarButtonLabel")]) {

CGRect frame = [[item valueForKey:@"frame"] CGRectValue];

if (view.frame.size.width < frame.size.width) {

NSLog(@"ラベルサイズを調整 %f -> %f", frame.size.width, view.frame.size.width);

frame.size.width = view.frame.size.width;

[item setValue:[NSValue valueWithCGRect:frame] forKey:@"frame"];

}

}

}

}

}

// ーーーー ここまで追加 ーーーー

    return YES;

}


各タブ項目の部品にアクセスし、該当するアイテム(UITabBarButtonLabel)の幅を調整しています。
このコードを追加した状態で実行すると、次の様になりました。
2013-02-26 13.09.59.png
タブ項目の幅が変わるタイミングとしては、
 ・タブを追加した時
 ・タブを削除した時
 ・画面を回転した時
が考えられます。
すべてのケースで上記のコードを呼び出す事により、タブ項目から溢れないタイトルを実装する事ができます。
また、タブのタイトルが動的に変わる場合もタイトルが溢れる可能性がありますので、忘れず処理を行ないましょう。
無料でyLeafの全機能を利用可能な「yLeaf Lite」が本日リリースされました。
無料
(2013.02.24時点)
posted with ポチレバ
広告が表示されますが、製品版と全く変わりなくご利用になれますので、是非お試しください!

yLeaf公式サイト:
スクリーンショット 2013-02-20 19.12.00.png
定期的に特定のサイトを閲覧する方に便利なiPhone/iPad用Webブラウザアプリ「yLeaf(ワイリーフ)」をApplib様サイトにてご紹介頂きました。
Appliv(アプリヴ) -iPhoneアプリが探せる、見つかる

yLeafの魅力を詳細にご紹介頂いておりますので、是非ご覧ください。
レビューワー様、誠に有り難うございました。

現在、無料版のyLeaf Liteを申請中です。
広告が表示されますが、製品版の全機能を利用する事ができますので、こちらも楽しみにお待ち下さいませ。
メモリを圧迫するから「今」必要の無いサイトを仕方なく閉じるけれど、いざ必要となった時に大量にあるブックマークから一々探して開くのが面倒くさい!
と感じた事はありませんか?

yLeaf(ワイリーフ)はそんな方の為に開発されたiPhone/iPadユニバーサルのWebブラウザアプリです。

350円
(2013.02.06時点)
posted with ポチレバ
公式サイト:

yLeafは次の特徴を持ちます。

1. 強力なグループ管理機能 
yLeafでは1つの仕事として開くサイトの集合を「グループ」と呼んでいます。
グループはフォルダ内に収めることでさらに分かりやすく管理することが可能です。
フォルダはいくつでも作成可能であり、さらにフォルダ内にフォルダを作成することも可能です。
フォルダごとまとめて違うグループ内に移動するなど、強力にグループ管理をサポートします。 
また、グループやフォルダにパスワードロックを設定する事も可能です。 

2. 複数のサイトを同時読み込み、瞬間切り替え 
グループを開くと、登録されているすべてのサイトが同時に読み込まれます。
各サイトはタブによって管理され、見たいサイトのタブをタップするだけで簡単に切り替えることが可能です。
また、グループ内のサイト追加や並べ替えなども簡単に行えます。 

3. デバイスの縦・横両対応 
yLeafのすべての画面が縦・横方向両対応です。
サイトによって適したデバイスの向きでご利用いただけます。 

4. 直感的なアイコンメニュー 
yLeafでは、各種操作を直観的にわかりやすいアイコン付きで表現しています。
アイコンの下には文章での説明もついていますので、操作に迷うことがありま-
せん。 

5. 好みのテーマで気持ち良い環境を 
フルカラーの中から、好みの1色をテーマとして使用することができます。
yLeafをあなた専用の色でカスタマイズし、お楽しみください。

新しいタイプの計算機アプリ「Mono Calculator」を日刊Appliv様、Appliv様サイトにてご紹介頂きました。
とても詳細にご紹介頂いておりますので、是非ご覧下さい。
レビュワー様、有り難うございました!



Appliv

350円
(2012.12.30時点)
posted with ポチレバ
無料
(2012.12.30時点)
posted with ポチレバ
日本で流通している主要な金魚を紹介したiPhone・iPad両用アプリ
 「日本金魚図鑑 -Japanese goldfish-」
がリリースされました!

奇麗な写真とともに、金魚の歴史や飼育方法について詳細な紹介がされています。
無料ですので、是非お試し下さい。

こんにちは。開発担当のICTFです。

UITabBarControllerに追加したビューは、そのビューが初めて選択されたタイミングで生成されます。
処理を重くさせない為の効率の良い処理ですが、例えばUITabBarControllerにwebサイトを表示する為のビューを3つ追加し、3つ同時に読み込み開始したいといった事もあるかと思います。
今回はUITabBarControllerに追加した全てのビューを最初から生成する方法についてご紹介します。

実はもう既に答えを書いてしまっています。
UITabBarControllerは「初めて選択されたタイミングで生成」するのですから、UITabBarControllerを表示するタイミングで全てのビューを一旦選択すれば良いのです。
以下サンプルコードです。

UITabBarController* tabController = [[[UITabBarController alloc] init] autorelease];

[tabController setViewControllers:viewList];


// 全てのページの読み込みを開始させるため、各ページを一瞬表示する

for (NSInteger i = tabController.viewControllers.count - 1; i >= 0; i--) {

    tabController.selectedIndex = i;

}