iPhone 開発 アーカイブ
UIView には contentMode というプロパティがあります。このプロパティを使えば、面倒な画像の編集をせずに見た目を変えられます。
contentMode は View のサイズが変わる時にコンテンツをどう表示するかを決めるものです。たいてい画像をどう表示するかを決めるので、UImageView や UIButton で使われます。enum で色々定義されているので、下の画像を使って順に試していきます。
今週リリースした FlickAddress (App Store) は、iPhone 標準の連絡先情報をグループ管理できるようになっています。すでに iPhone に登録されている連絡先情報はそのまま FlickAddress でも扱えますし、FlickAddress で情報やグループを編集すれば、標準の連絡先アプリにも反映されます。
このように標準の連絡先データベースを利用するための API が iOS に標準で搭載されている AddressBook フレームワークです。さらに、連絡先の表示・編集等の UI を表示するための AddressBook UI フレームワークも用意されています。
今回は FlickAddress のリリースを記念して、これら 2 つのフレームワークの概要を紹介しましょう。
Objective-C では「カテゴリ」という仕組みを使って既存のクラスに新しいメソッドを付け加えることができます。自分で作ったクラスでもシステムが提供しているものでも付け加えることができますのでカテゴリを活用した例を紹介します。
Cocoa / Objective-C プログラミングをしていると、NSArray や NSSet、NSDictionary あたりはよくお世話になりますよね。これらオブジェクトの集合を扱うクラスは一般に「コレクション」と呼ばれています。Cocoa / Objective-C に限らず、コレクションをうまく扱うとコーディングのスピードもプログラムの実行スピードも大きく改善できます。
今回は、既存のコレクションクラスを使うのではなく、独自のコレクションクラスを作る方法とそのメリットを、NSArray のサブクラスを例として紹介します。
通常は端末設定の言語で表示言語が決まっていきますが、アプリ内の文言を端末設定とは違う言語で表示したいというシチュエーションもあるかと思います。今回は、その表示言語をアプリ内から切り替える方法をご紹介します。
Xcode の左側のファイルツリー表示は、何故かファイル名が名前順に並んでおらず、並べ替える機能もありません。なのでファイル数が多くなってくると、探したいファイルが全く探せなくてイライラしますね。このファイルツリーを名前順に並べたいというのが今回の課題です。
以前、「より”紙”ライクな Inkiness for iPad の回転」で、Inkiness for iPad の回転についての話をしました。Inkiness for iPad では、iOS の自動回転機能を使わずに4方向に対応させています。今回は、その手法をご紹介しようと思います。
製品版には必要ないけれど、開発中にあると便利な設定項目を再ビルドなしで変更したいというシチュエーションが開発をしているとあるかと思います。そんなときに何か方法はないかと思い試してみた方法をご紹介します。
例: データ参照先(URL、Local 等)の切り替え、ランダムにわざとなんらかの動作が失敗するような仕込みの On/Off
みなさんお元気ですか。今回は、Cocoa Touch や Objective-C からちょっと離れて、筆者がいる開発チームでやっているペアプログラミングの効果について紹介します。
1つの画面とキーボードで、2人がいっしょに開発作業を進めるペアプログラミングは、XP(エクストリーム・プログラミング)で提唱されているプラクティスの中でも有名で、程度の差こそあれ、比較的多くのプログラマが経験していると思います。
半年ほど前、筆者のいる開発チームでも、順番にドライバー(書く人)とナビゲーター(見てる人)を決めて、1日のうち最低1時間はペアで作業するということを始めてみました。それまでも、特に意識せずにペアでプログラミングすることはありましたが、チームの取り組みとして導入したのはその時が初めてでした。
今回は google-toolbox-for-mac に付属する単体テストフレームワーク GTM UnitTest を紹介します。Xcode に付属している OCUnit に比べてアプリとして実行されるのでテストコード自体のデバッグがしやすい事や通信などの非同期テストが可能などの点が優れています。
こんにちは。Objective-C は Emacs で書く派の宮本です。Emacs ユーザーならドキュメントも、もちろん Emacs で読みますね。今までドキュメントの参照には xcode-document-viewer にお世話になっていました。この Emacs Lisp を使うと、キーワードで検索して、結果を anything で絞り込むことができます。Xcode でドキュメントを検索するものと同じ検索結果が得られるので、とても便利です。ただ、筆者はドキュメントのタイトルのみから検索することが多いので、そちらに特化した anything の情報源を勉強がてら書いてみました。
アプリによってはユーザーの入力値をバリデーションする必要がある場合があります。今回はバリデーションを行うタイミングについて書きたいと思います。
今回は以下のようなアカウント情報入力画面を考えてみます。
- UITextField が画面に表示されている
- NavigationBar には「保存」ボタンが設置されている
- 入力値が「カラ」もしくは「空白文字」以外の場合を正常な入力とする
- UITextField への入力値が不正な値の場合には「保存」ボタンを無効化する
Objective-C では、オブジェクトの生成に alloc と init などのイニシャライザを組み合わせて使うというのは、ちょっとでもかじったことがある方はご存じでしょう。
MyObject *obj = [[MyObject alloc] init];
今日はこの仕組みについてです。まず、この alloc-init について2つのポイントを挙げておきます。
- 呼出し側はイニシャライザの戻り値を使うことになっている
- イニシャライザはクラスのインスタンスメソッドとしてプログラマが追加/オーバーライドできる
Objective-C ではこのことが言語の基本として存在しているおかげで、オブジェクト生成の柔軟性がぐっと上がっています。イニシャライザはプログラマが実装するので、どのようなインスタンスを返すかは自由です。上記の例で言えば MyObject の init は、MyObject そのもののインスタンス以外を返しても良いということです。
iOS では座標を浮動小数点型(CGFloat)で指定します。アンチエイリアスのかかった美しい表示のために必要な機構ですが、くっきりとした(パキッとした)描画を行うには少しコツがいります。
前回は Python から Xcode を操作してみました。今回は作成した Python スクリプトを Emacs 経由で実行してみたいと思います。