2014年5月5日月曜日

自動数独のLite版作りました

自動数独に機能を追加してバージョンアップしたので、今までのはLite版として出してみました。
広告機能の練習もかねてます。色々有る中でとりあえずiAdを入れてみました。

今後バージョンアップするとしたら認識できる数字の書体を増やしてみたいと思います。

以下、アプリの説明です。

9×9マスの数独をこのアプリで撮影すると、、、 
撮影した画像中から認識した数字を基に自動的に空欄を埋めて解を導いてくれます。 

アプリの操作手順は以下1~3の通りです。 

1.「撮影画面」から数独(9×9)を撮影、または「選択画面」から画像を選択します 
2.画面内の赤枠と数独の外枠が一致していれば決定ボタンを押します 
3.解答表示ボタンを押します 
(赤色数字:撮影した数字の認識結果 青色数字:赤色数字をもとに数独を解いた結果) 

【注意点】 
・数独の撮影時、画面内の赤枠と数独の外枠は可能な限り一致させてください 
(ズレの分だけ数字の認識が不安定になります) 
・解答表示ボタン押下後に赤色の数字の位置を確認して数字認識が正しく行われているか確認してください 
・処理画面で画面をタップするとボタンの表示/非表示が切り替わります

3.5インチiphoneで起動して処理画面を開いた場合、ボタンで解答が見えなくなってしまうので表示/非表示を切り替えれるようにしました。

【連絡先】
アプリに関する相談は下記アドレスにご連絡ください
issa.x.iphone●gmail.com (●は@に変えて下さい)




2014年5月2日金曜日

自動数独(AutoSudoku)のアップデート

数字認識画面でタップすると数字を自由に変更できるようにしました。
数字の書体は1種類しか学習していないので正しく認識できない場合がありますが、今後色んな書体の数字にも対応していこうと考えています。

以下アプリの説明文です。

9×9マスの数独をこのアプリで撮影すると、、、 
撮影した画像中から認識した数字を基に自動的に空欄を埋めて解を導いてくれます。 

アプリの操作手順は以下1~5の通りです。 

1.「撮影画面」から数独(9×9)を撮影、または「選択画面」から画像を選択します 
2.画面内の赤枠と数独の外枠が一致していれば決定ボタンを押します 
3.数字認識ボタンを押して認識結果を確認します
4.必要に応じて画面をタップして数字を変更します
5.解答画像ボタンを押します 
(赤色数字:撮影した数字の認識結果 青色数字:赤色数字をもとに数独を解いた結果) 

【注意点】 
・数独の撮影時、画面内の赤枠と数独の外枠は可能な限り一致させてください 

(ズレの分だけ数字の認識が不安定になります) 

【備忘録】オートレイアウトの配置ズレ

【症状】
コントロールを配置して画面下部に位置をあわせて実行したところ、1回目の表示はうまくいくが2回目の画面表示で異なる位置に表示される。

【解決法】
サイズインスペクタ内でコントロールの幅と高さを明確に指定するとなおる


2014年4月29日火曜日

【備忘録】タップイベントの取得

自動数独のバージョンアップを考えてます。
数字認識の学習精度が足りないので手動で数字の変更ができるようにしたいと思います。

タップイベントはUIResponderクラスに定義されているのでViewControllerクラスからtouchesBeganをオーバーライドするだけで使えるようになる!手軽!(ViewControllerはUIResponderの子クラス)

あとはViewのサイズと、表示する画像のサイズを合わせてる事で、タップした座標位置に赤枠を表示する事ができるようになりました。ありがとうございました。

次はタップした位置の数字を変更できるようにしてみます。




2014年4月26日土曜日

Xcodeのショートカット集

Xcodeでの開発で複数行に渡る一括コメントアウト。
すっすっとやりたいなあーって思ってたら下記参考サイトに出会いました。
ありがとうございました。

http://516k.blogspot.jp/2010/11/xcode.html

コメントアウト以外にも色々面白いショートカットがあるので使っていこうかと思います。

1.ヘッダファイル(*.h)と実装ファイル(*.m)の切り替え [Opt]+[Cmd]+[↑] 
2.対象シンボルへジャンプ [Cmd]+任意のシンボルをダブルクリック
3.対象シンボルのAPIリファレンスを表示 [Opt]+任意のシンボルをダブルクリック
4.選択行のコメントアウト [Cmd]+[/]
5.再インデント [Ctrl]+[I]
6.入力補完のウィンドウ表示 [Ctrl]+[,] ←カンマね
7.入力補完の実行 [Ctrl]+[.] ←ピリオドね
8.ビルドとデバッグ [Cmd]+[Enter]

2014年3月15日土曜日

【備忘録】処理中のお知らせ機能

画像処理など重い処理をする場合、処理中である旨を知らせる機能があると便利だと思い、くるくると回るアニメーションを追加しました。

問題なのは、くるくるの開始後すぐに重い処理を実行するとくるくるしないという事です。
くるくる開始と処理を別スレッドにする事で解決しました。

情報筋によると、メインスレッドでは重い処理をしないのが基本とあるので、重い処理は別スレッドでやろう。さらに情報筋曰く、くるくる開始と停止はメインスレッドでやると吉という。

[self->mIndicator startAnimating];
//1 処理を別スレッドで実行
[self performSelectorInBackground:@selector(ProcessingProgress) withObject:nil];
//2 処理を別スレッドで実行
[NSThread detachNewThreadSelector:@selector(ProcessingProgress)toTarget:self withObject:self];
//【スレッド】進捗の表示
- (void)ProcessingProgress{
    @autoreleasepool {
        //画像処理
        ConvertImage()
        //アニメーションの停止
        if ([self->mIndicator isAnimating] == true) {
            [self->mIndicator stopAnimating];
        }
    }
}

1と2はどちらもスレッドを実行するための記述ですが、今回は1を使ってます。

下記サイトを参考にしました。
ありがとうございました。

NSThreadを使ったスレッド処理
http://iphone-dev.g.hatena.ne.jp/sohei/20100524/1274704461

ARC時スレッド内
http://blog.natsuapps.com/2011/11/ios5-arc-autorelease-bridge-xcode.html

無題メモランダム
http://blog.mudaimemo.com/2010/05/iphoneuiactivityindicatorview.html

ソースコードをドラマチックに貼付け

ソースコードをハイライトするウィジェット「Code Prettify」を試しに導入してみます。

下記サイトを参考にしました。ありがとうございました。
貼付けに必要な変換処理もしてくれる便利なサイトでした。
http://www.kuribo.info/2008/04/code-prettify.html

    //UIActivityIndicatorViewのインスタンス化
self->mIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self->mIndicator.frame = CGRectMake(0, 0, 100, 100);
self->mIndicator.center = self.view.center;
[self.view addSubview:self->mIndicator];
self->mIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self->mIndicator.frame = CGRectMake(0, 0, 100, 100);
self->mIndicator.center = self.view.center;
[self.view addSubview:self->mIndicator];
self->mIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self->mIndicator.frame = CGRectMake(0, 0, 100, 100);
self->mIndicator.center = self.view.center;
[self.view addSubview:self->mIndicator];