watermint.org

Takayuki Okazaki's blog

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iOSプログラミング: 不透明なUINavigationBarを設定しつつも、背景のビューは座標を変えたくない, 補足

はてぶコメントで下記のようなコメントを頂きましたので、なぜ前エントリのようなやり方をしているかを補足させていただきます。

UIScrollViewのcontentOffsetでスクロール位置にオフセットを付けてバーにめり込んでいるように見せかけるのが正解だと思う。

たしかに、UIScrollViewをおいても同じことができます。ただ、それを言い出せばUIScrollViewでなくともUIViewControllerのビューにもうひとつUIViewを作ってその上にコンテンツをいろいろのせておいて、そのUIViewのオフセットを (0, -44) とかに設定しておいてもいいでしょう。この方法でもいいんですが、あえてこの方法を使っていないのには理由があります。UINavigationBarは必要に応じて表示したり消したりすることがあります。バーを表示しているときは UIScrollViewのオフセットを(0, -44)にして、非表示のときには (0, 0)に戻して、などと処理をすることは面倒なだけでなく、思わぬバグを招くことが多いのです。コメントを頂いたような方法を使っていないのは上述のバグを生まないようなコードにしたいというのが最大の理由です。可読性もあがりますし、あちこちに注意書きを書かなくてすみます。
またUIScrollViewで実際に何かをスクロールさせているような場合のときは、オフセットを(x, -44)にするだけでなく、frameサイズも適切に設定してやらないとpagingEnabled=YESのときスクロール時のストップ位置が思わぬところになってしまったり、より面倒くさい事態になりそうなので個人的にはこの目的のためにUIScrollViewを使うというのは好みではありません。
一方で前エントリで紹介した方法のリスクとしては、iOSの仕様がかわって挙動がかわってしまうことがあげられます。ただこのリスクは個人的には、オフセットを操作してやる方法でも大差ないと考えています。

最後に、どんな実装が最適なのかは制約事項とユースケース次第で状況によると思いますので「〜〜が正解だと思う」というのは一概にいえなくて、多種多様な実装方式のメリット/デメリットを押さえていくのがこれまたiOSプログラミング道だと思っています。いろんな実装方式があると思っていますので、いろいろ教えてもらえるとありがたいです。今回のようなコメントを頂くことで、仮説と検証もより深みを持ちそうです。id:rryuさん、コメントありがとうございました。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iOSプログラミング: 不透明なUINavigationBarを設定しつつも、背景のビューは座標を変えたくない

Cocoa Touchには画面遷移をコントロールするために便利な、ナビゲーションコントロールという機構があります。ナビゲーションコントロールには、全ページに戻るためのボタンや、ページのタイトルを表示するためのナビゲーションバーがあります。さて、このナビゲーションバー(実体はUINavigationBar)、translucentプロパティをYESにすれば透明になり背景のビューは座標が(0, 0)から始まりますが、translucentが NO の場合には(0, 44)などから開始となります。

Screen shot 2010-10-15 at 0.16.44.png

translucentがNOであるような、UINavigationBarを表示するとUIViewController自体のoriginが(0, 44)などになる。

Screen-shot-2010-10-15-at-0.18.14.png

translucentをYESにして、透明にすれば問題はすぐ解決しますが、表現の問題として時には半透明でない方がよい場合が有ります。そういった状況に対処する方法です。UINavigationBarはtranslucentをYESにしておき、backgroundColorを設定してやればうまく行きます。

Screen shot 2010-10-15 at 0.24.24.png

ViewController側で次のようにコーディングすればよいでしょう。

- (void)viewDidAppear:(BOOL)animated {

self.navigationController.navigationBar.translucent = YES;

self.navigationController.navigationBar.backgroundColor = [UIColor blackColor];


こういう要求に対するコーディング、わかってしまえば簡単なんですが調べるのには結構時間がかかってしまうものなんです・・。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iOSプログラミング

iOS向けのプログラミングを始めたのが今年の3月中頃。初めてのiPhone/iPadアプリは4月2日リリース。iOS向けプログラミングを初めて半年ちょっとになりました。せっかくなので、忘れてしまわないうちに、何日かに分けてメモを残していこうと思います。まず最初のメモはiOSプログラミング全般について。

_DSC3196.jpg

iOS向けプログラミングでは、開発環境はMac上のXcode、開発言語はObjective-Cを使います。さらに実際のiPhoneやiPadといったデバイス上で自作アプリを動作チェックするためには有償の開発者登録(10,800円/年)が必要です。この開発者登録が高いと感じるか、安いと感じるかは人それぞれの感覚次第かと思いますが個人的にはアプリの審査と親切なフィードバック/iOS上に繰り広げられているビジネスモデルへの参加価値といった点から開発者登録は割安に感じるぐらいの価値があると思っています。

_DSC3181.jpg

さて、実際のプログラミングですがObjective-Cという、C++/Javaなどの言語の経験をバックグラウンド持っている自分としてはやや取っ付きにくい言語を使います。このことを取り上げてiOS向けプログラミングは難しいと言う人も時々見聞きしますが、個人的には言語の持つ文法やコンセプトの違いは最終的なプログラムにさほど大きな影響をもたらさないと思っています。開発生産性の違いを指摘する人もいますが、今や開発言語は言語自体の開発生産性だけで語れるものではなく、フレームワーク、開発環境など開発を取り巻く全体をみて判断する必要が有ります。では、iOS向けXcode、Cocoa Touch、Objective-Cの組み合わせはどうでしょうか。

_DSC3189.jpg

開発環境 Xcode は、EclipseやNetBeansなどモダンなJava開発環境に慣れた人にとっては力不足感を感じると思います。Microsoftの開発環境はさほど詳しくないので評価しづらいですが、すこし使った経験だけで判断してもVisual Studioは十分に洗練されており、Xcode は発展途上という言い方をされてやむを得ない差があると感じます。シンタックスエラーの検出、入力補完は今やリアルタイムに実施されるのが当然ですが Xcode にはそれが有りません。バージョン管理システムとの親和性もまだまだ改善の余地を感じます。Xcodeの力不足感、Objective-Cの文法への戸惑いはiOS向けアプリケーション開発にとって最大の心理的障壁といっても過言ではないようにも思えてきます。次期メジャーバージョン Xcode 4 Betaも少し試用しましたがようやくモダンな機能がいくつか追加されたものの、Eclipse、NetBeans、Visual Studioに追いつくにはまだ数年を要するのではないかと感じました。

_DSC3191.jpg

さて、一方でiOS向けフレームワークCocoa Touchはどうでしょうか。今まで主にJavaベースで、いくつかのリッチクライアント・フレームワークを使ってきましたがCocoa Touchほど洗練されたフレームワークは無いだろうという印象を持ちます。APIドキュメントの説明が不足しているが為に生産性を損なっていることも有りますが、枯れたMVCモデルを採用しつつもモダンに仕上がったAPI郡は圧巻です。iPhone/iPadはAppleがハードウエアから、OS、フレームワークまで一貫して製造しているためフレームワークがデバイスに最適化されているということは当然です。ハードウエア/OSの組み合わせに最適化されているからこそ、「特殊な状況下におけるバグ回避のコード」をほとんど書かずにすみます。全くゼロというわけではありませんが、今までに経験したハードウエア、OS、フレームワークの組み合わせの中では最も少ないと思っています。この効果は絶大です。Xcodeが押し下げている開発生産性を補って十分なメリットを感じます。

_DSC3339.jpg

機種依存やバグ回避のコードをほとんど書かなくてよいがために、フレームワーク上にバグ回避フレームワークを作り上げる必要が有りません。Cocoa Touchを直に使った方が生産性が上がり、パフォーマンスも損なわれません。Cocoa TouchのAPI郡は既に十分抽象化されているためこれ以上ラッパーやGlueコードを書くことは多くの場合無意味です。このため、iOS向けアプリケーション開発ではいかにCocoa Touchのコンセプトをつかみ、APIを正しく使えるかが開発生産性だけでなく最終的なアプリケーションコードの品質を左右するといって言い過ぎではないでしょう。

ググって調べた情報を鵜呑みにして開発するのではなく、しっかりとコンセプトの再確認と自身による検証がiOS向けアプリケーション開発では「急がば回れ」になる。ということがこの半年の開発経験による結論です。また、次回以降のメモではもう少し具体的な検証結果を残していくことにします。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPad/iPhone用のペン

_DSC1638.jpg
STAEDTLERのペンシルホルダーに導電性のスポンジ(サンワサプライの導電性ウレタンスポンジ)をぐりぐりとねじ込んでiPad/iPhoneで使えるペンの出来上がり。いくつか作り方を試しましたがこれが一番シンプルで、信頼性が高く、操作性も満足に仕上がりました。iPad/iPhoneのタッチパネルは静電容量方式。普通のスタイラスペンでは反応しません。
_DSC1642.jpg
ペンを作るにはWikipediaにある通り「指と同等の静電的な導電性があるもの」が必要になります。また、ガラス面を傷つけないようやわらかい素材が有効です。通常ICや電気部品を保護するために使う導電性のウレタンスポンジはこの用途にもってこい。ペン先はこれに決定。ペンの軸も同様に導電性があることが好ましいためたまたま持っていた金属製のSTAEDTLERのペンシルホルダーにさしてみたらなんとも具合がいい。とっても便利です。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPhone 4、故障と交換

iPhone 4 restore failed with iTunes

少し前の話ですが、7月末頃、iOS 4.0からiOS 4.0.1にアップデートしようとしたところ、「iPhone”iPhone”を復元できませんでした。不明なエラーが発生しました(9)」というエラーがでてアップデートが完了しません。iMacを再起動してみたり、MacBook Pro側で試してみたり、違うUSBポートから実行してみたりなどかなり多くのパターンを試してみましたがどのパターンもだめ。

_DSC1625.jpg

何度試してもiPhone 4側にiTunesにつないで復旧せよ、という表示のまま。仕方なく、渋谷のApple Storeへ持ち込み。Apple Storeでも現象が再現し、iPhone 4本体は交換となり無事復旧しました。

_DSC2483.jpg

ちなみに交換してもらったため、本体への技適マーク表記がなくなっています。iOS 4は技適マーク表記があるので電波法上問題はありませんが、本体に印字されているという希少価値がなくなったのはちょっと残念。まあ、新しくなったのでよしとしましょう。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPhone 4

_DSC0683.jpg

ブログに書くのが遅くなりましたが、iPhone 4が届きました(6月29日)。2年間つかったインターネットマシンことSoftBank 922SHからの機種変。なんだかんだ、届いてから1ヶ月ぐらいですね。

_DSC0687.jpg

Retina Displayは確かにおそろしくきれい。デバイスの持つ表現力もさることながら、iOS自体もこれに向けて周到に準備が整えられていたのが大きいと思います。高ppi対応は記憶が正しければ、Mac OS X Leopardあたりから本格的に入り始めたので3年の月日をかけて熟成させ、MacではなくiPhoneに最初に導入された訳です。WindowsもVistaからは高ppi対応が入っていて、2007年当時、これからはディスプレイが「○?○万画素!」と謳われて電気屋で売られる想像を当時していましたが予想は外れて、2010年ようやくスマートフォンがその戦いを始めようとしているようです。

_DSC0731.jpg

iPhone 4を約1ヶ月使っての感想です。iPhone 3GSも平行して使っていますが、使ってみるとiPhone 4は確かに優れていますがiPhone 3GSを置き換えるほどではないことに気づきました。なぜなら同じアプリがiTunesによって同期され、Mobile Meによってメールや連絡先などの情報は同期されているので使い勝手は何ら変わらないからです。言い換えれば、iPhoneの魅力はやはりアプリであって、iPhoneというデバイス自体の機能や性能差というのは微々たるものだと感じるようになりました。

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPad/iPhone電子書籍アプリ「クロノス日本版5月号」

Chronos 2010 May

電子書籍アプリ「クロノス日本版2010年5月号」が有償にてダウンロードできるようになりました。時計好き、メカ好きの方には心をそそられる内容がたくさん入っていますよ。

クロノス日本版5月号

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPad/iPhone電子書籍アプリ「EDGE STYLE 2010年7月号創刊号」

edgestyle-2010-07

双葉社様の新創刊雑誌「EDGE STYLE」2010年7月号のアプリがApp Storeから無償でダウンロード開始いたしました。

EDGE STYLE 2010年7月創刊号

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPad電子書籍アプリ「ダーリンは外国人 in English」

My Darling is a Foreigner in English

メディアファクトリー様からリリースされた「ダーリンは外国人 in English」の電子書籍アプリ。こちらも、東京カレンダーと同様、NetFront Magazine Viewerをお使いいただいています。「ダーリンは外国人 in English」は「英語のみ」「英語と日本語」を切り替えるモードがあり、英語の学習教材としても便利です。

ダーリンは外国人 in English

Share on Facebook
Share on GREE
このエントリーをはてなブックマークに追加
はてなブックマーク - iPad/iPhone電子書籍アプリ「東京カレンダー 2010年7月号」

Tokyo Calendar 2010 July

東京カレンダー 2010年7月号アプリがリリースされました。7月号は新創刊号。特集は「東京レストラン」と「みんなが愛した女優の映画279本」の二本立て。表紙には豪華5人の女優さんが並んでいます(菊地凛子/黒木メイサ/小西真奈美/戸田恵梨香/広末涼子)。

東京カレンダー 2010年7月号