iOS

iOSプログラミングの注意点 (その2

昨日がEXC_BAD_ACCESSだったので次はメモリリークだよねと思っていたのだが、タイムリーにやっかいなエラーが発生した(過去にもやったことがある)ので今回は別なテーマにする。 -.plistに注意 Xcodeのプロジェクトを作ると必ず"プロジェクト名-info.plist"と…

iOSプログラミングの注意点 (その1

Objective-Cを使ったiOSアプリケーション開発を初めてから半年以上経ち多少は慣れてきた。その中で他のプラットホームと比べてiOS上でのプログラミングで注意すべき点を幾つか上げていこう。 EXC_BAD_ACCESS 恐らくiOSプログラミングを初めて最初に遭遇する…

UINavigationBarのタイトルフォントサイズを変える

iOS

同ビューのフォントサイズは視認性を優先してかなり大きめのフォントサイズが使われている。しかし年月日等を他のボタン等と一緒に表示しようと思うと少しフォントサイズを小さくしたいと思うことも多い。 なので変更しようと思ったのだが、対象となるUINavi…

「Objective-Cによるプログラミング」日本語版公開

Objective-Cによるプログラミング - developer.apple.com 公開された。内容としてはObjectinve-Cを使うオブジェクト指向プログラミングの紹介と、Cocoa Foundationのコレクションなどの主要なイディオムを構成する基本的なクラスを紹介している導入的な資料…

UITableViewControllerをUIViewControllerに切り替える

以前に日記UITableViewController上に配置したUITableViewでヘッダ(tableHeaderView)をスクロールさせずに固定するTipsを書いた。 tableHeaderViewを固定にするコード -(void)scrollViewDidScroll:(UIScrollView *)scrollView { // ヘッダViewを取得 UIView*…

plistの使い道

androidアプリケーションで便利な機能の一つに様々構造のxmlをデータソースとして使えることだ。例えばarrays.xmlは配列構造のデータをデータソースとして供給できる。 arrays.xml <resources> <string-array name="list_display"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </string-array> <string-array name="list_item"> <item>…</item></string-array></resources>

知っていたのか? 知らなかったのか?

iOS

Apple - A letter from Tim Cook on Maps 知っていたならこの酷い完成度で世に出したことを責められるのだろうし、知らなければチームの惨状を把握していなかったとして責められるだろう。 前任者があまりに偉大だと比較される側は正直かわいそうだとも思う…

OCUnitがアプリケーションのコンテキストで動かない。

独立したテストは動くのだが、通常の単体テストとしてアプリケーションのコンテキストで動くはずなのにアプリケーション(AppDelegate)が起動しないのだ。ウィザードで追加したので特別な設定は必要は無いと思っていたんだが、そうではないようだ。 iphone - …

cvFindContoursのmodeパラメタを変えて実行してみた

昨日のエントリで書いたcvFindContoursのmodeパラメタだが、解説するよりも実際に動かした結果を見たほうが分かりやすい。なので実際に試してみた。方法としては今まで紹介してきたようにcvCvtColorでグレイスケール化→cvThresholdを使って二値化した画像を…

cvFindContoursのmodeパラメタとmethodパラメタ

cvFindContoursは与えられた2値化済み画像の輪郭を抽出してCvMemStorageに格納してくれるのだが、パラメタによって抽出した輪郭の格納の方法(構造)が違う。 cvFindcontours - Structural Analysis and Shape Descriptors ― OpenCV v2.4.2 documentation mode…

意外に簡単? 4インチスクリーン対応

iPhone5に対応したXcodeのバージョン、4.5が正式に登場した。 Xcode 4 Downloads and Resources - Apple Developer変更点は色々とあるのだが、なにより気になるのは iOS6(iPhone5)対応は? 旧アプリも含めた4インチディスプレイへの対応は? だと思う。私は面…

輪郭を認識する

ここまでやってきたことは1. cvCreateImageによるIplImageの生成 2. cvCvtColorによるグレイスケール画像の生成 3. (cvThreshold又はcvAdaptiveThreshold)による画像の2値化処理 だが、これらは全てOpenCVで最も美味しい機能の一つであろう、輪郭の検出を行…

適応的2値化処理

昨日紹介した2値化処理は見た目では所謂「反転画像」であり確かに2値化なのだが、私は2値化した画像から対象となるオブジェクトの輪郭を認識してその座標を得ることが目的なので他の方法で2値化を行うことにする。 適応的2値化処理 cvThreshold関数による2値…

2値化(Binarization)

2値化というのは文字通り、画像の色情報を黒と白の2値に単純化する操作である。 画像処理、特に各種の認識処理では画像の情報が単純であればあるほど効率良く行えるので2値化は非常に重要である。一般的には2値化のことを「モノクローム化」と考えるが(私も…

IplImageとUIImageの相互変換

既に色々な方が書いており色々なユーティリティとなっているが、私は取りあえずObjective-Cのクラスユーティリティとして使っている。(そのうち手を入れる予定だ) OpenCVUtil + (IplImage*)IplImageFromUIImage:(UIImage*)image { CGImageRef imageRef = ima…

IplImageを作成する

OpenCVがXcode上、iPhoneシミュレータで動くようになったのでいろいろと試していこう。 OpenCV上で画像データを格納するための型は現時点(ver2.4.2)で大きく二つある。 IplImage構造体 OpenCV開始当初から用意されているCの構造体。殆どの画像操作関数はこの…

OpenCVをビルドしてプロジェクトに組み込む

少し空いてしまったが、少しずつOpenCVも勉強していこうと思う。 それには実際にサンプルコードを動かしていくのが一番なので、まずはOpenCVを使ったコードが動くように、それもiOS環境上で動くようにしなくてはならない。導入はHomeBrewかMacPortsを導入し…

Viewにグラデーションレイヤを適用する その2

iOS

やはりアドホックな対応というのは無理があるようだ。さて、どうしようか。 きちんと再描画をさせるのであればやはりUIViewの派生クラスを書かなければ駄目だろう。ということで実際に書いてみた。 実装 BBUIGradientView.h #import <UIKit/UIKit.h> //グラデーションのアン</uikit/uikit.h>…

Viewにグラデーションレイヤを適用する

androidではGUI部品に対して色のグラデーションを描画する場合、XMLでDrawableのインスタンスを記述するか、コードにより直接GradientDrawableクラスのインスタンスを生成するコードを書き、対象のViewに適用することで可能だった。 androidによるグラデーシ…

UIToolBarとそのボタンもコードで追加する

UINavigationControllerにはナビゲーションバーの他に、下端にツールバー(UIToolBar)を配置することができる。 UIViewControllerのプロパティはインタフェースビルダのアトリビュートインスペクタで確認、変更することができる。ツールバーに関してもこれで…

UINavigationBarのボタンはコードで追加する

UINavigationControllerをベースにしたビューの遷移は、ビューがプッシュされる度にナビゲーションバー(UINavigationBar)と呼ばれるツールバーが上端に配置される。※ナビゲーションバーには遷移を逆に辿るために「戻る」ナビゲーション用ボタンが自動的に配…

日本語ドキュメント公開3種

iOS Developer Libraryから以下の日本語ドキュメントが公開された。 iOS Developer Library - 日本語 iOSチーム管理ガイド 日本語版 Xcode ユニットテストガイド 日本語版 App Storeへの登録に関するチュートリアル 日本語版 どれも読みたかったが特にユニッ…

UITabViewControllerとMemory Warning その2

Modal View表示時にMemory Warningが発生するとその下にある全てのviewControllerのviewDidUnloadデリゲートが呼ばれるのだが、そこでViewControlerが管理しているViewが解放されてしまっているらしい所までは解った。しかしどうやってそれを防ぐかが解らな…

UITabViewControllerとMemory Warning

表題の通りだが、UITabViewControllerのタブ上に乗せたViewから更にModalなViewを表示して、そこでMemory Warningを発生させるとタブ上のViewが描画されずに真っ黒になってしまうという現象に悩まされている。どんな構成でも発生する訳では無く、UITabViewCo…

スプラッシュ

iOS

iOSアプリケーションはバンドルにDefault〜という名前の画像ファイルを含めると起動時にその画像をスプラッシュとして表示してくれる。 スプラッシュ用ファイル名 解像度 対象デバイス Default.png 320*480 iPhone3G/3GS Default@2x.png 640*960 iPhone4/4S …

Viewのローテーション通知処理を一時的に禁止する

iOS

何度か話題にしてきたカスタムなUIAlertViewだが、どうにもこうにも上手く制御できない。 あるデリゲートメソッドが意図せず呼ばれる 同じデリゲートメソッドで振る舞いが変わる オリエンテーション(向き)変更時のUIAlerViewのリサイズ/リレイアウトが上手く…

iOSのlong型に注意

iOS

例えば時間計算でよくあるケースとしてエポックから現在時までの経過秒数(GMT)を取得する処理だが、Objective-C/Cocoaでは以下のように簡単に書ける。 NSDate* now = [NSDate date]; long result = (long)([now timeIntervalSince1970] * 1000); //秒数なの…

UIAlertViewのwill〜で始まるデリゲートに注意

iOS

以前にUIAlertViewのwillPresentAlertViewが予期せず呼ばれてしまうというエントリを書いた。 UIAlertViewの予期せぬwillPresentAlertViewこの時の原因は(恐らく)CALayerのアニメーションが終わらないうちに他の処理が呼ばれた為に再度同メソッドが呼ばれる…

ZXingObjcを使ってみる

既存のプロジェクトへの組み込みは出来たがヘッダファイルが大量にあるために、いちいちTarget Membershipを"public"にしようとするとXcodeが固まってしまうので、exampleのプロジェクトのように"../ZXingObjc/ZXingObjc"などと相対パスをヘッダーパスに追加…

バージョンアップの妙

iOS

iTunes connectに申請しているアプリケーションのバージョンアップを申請していたのだが、今回もきっちり11日で"wait for review"から"in review"に移行。しかし、その後は一瞬で"Approved"、なぜか? 考えられるのは"review note"に"several minor bug fix"…