Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2009-06-29

[iPhone] UIViewControllerの各メソッドの役割おさらい 01:11  [iPhone] UIViewControllerの各メソッドの役割おさらい - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone] UIViewControllerの各メソッドの役割おさらい - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone] UIViewControllerの各メソッドの役割おさらい - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント


※ほしさんのコメントを受けて、ビューが実際にロードされるタイミング周りの内容を追記&修正しました。ほしさん、ありがとうございます。


このブログを読んでいる方ならば、一番お世話になっているんじゃないかと思うCocoa touchのクラスUIViewController。画面上に表示するビューを管理する上で欠かせないクラスです。


ただ、このUIViewControllerアプリには初期化時に呼ばれる可能性のあるメソッドが大量にあり、どれがいつ使われるのか、ある処理はどのメソッドに記述するべきかといった点で迷うのも事実だと思います。はい、まさしくボクがそんな状態です。


「これじゃいつまで経っても初心者のままだ」と思い、ちょっとまとめてみることにしました。出典はAppleのオンラインドキュメントと、後述する「iPhoneアプリケーションプログラミング*1」です。


メソッド名機能
-initWithNibName: bundle:指定したXIBファイルを開くための初期処理を実行。IBで作成したxibファイルを読み込むための前準備。ただし、まだこの時点ではnibファイルはロードされていないので注意
viewメソッドorプロパティビューを実際に表示するときにもちいるプロパティ。このプロパティへのアクセスによって、ビューのロード処理が始まる。
-loadViewUIViewControllerクラスのviewプロパティが必要とされたタイミングにviewが無指定だった場合(initWithNibNameでxibファイルを指定していなかった場合、またはviewコール前にsetViewしていなかった場合)、フレームワークによって自動的に呼ばれるメソッド(=自分で直接呼んだらダメ)。ビュー作成にIBを使わず、マニュアルで作りたい場合にはここで作る
-viewDidLoad initWithNibName: bundle:でxibファイルが開かれたら、まず呼ばれるメソッド。画像等はまだ画面上に表示されていない
-viewWillAppear: animated:ビューが画面上に表示される直前に呼ばれるメソッド。
-viewDidAppear: animated:ビューが画面上に表示された直後に呼ばれるメソッド。

なるほど。順番で言うと


  1. -initWithNibName: bundle:
  2. (-setViewによるUIView*系クラスのセット)
  3. viewプロパティへのアクセス or viewメソッドのコール
  4. (-loadView) ← Nibファイルを指定していなかった場合 or setViewしていなかった場合
  5. -viewDidLoad
  6. -viewWillAppear: animated:
  7. 《画面表示》
  8. -viewDidAppear: animated:
  9. 《完了!ユーザー操作が可能に》

となるんだ。

ということはloadViewはviewに何も指定されていないときに呼ばれるわけで、xibファイルがロードされた場合には呼ばれない。なので、このloadViewメソッドではビュー(V&C)に注目した処理を書くと良さそう。

そしてデータ(M)の初期化などの準備は、-initWithNibName: bundle:を呼んでいる処理の中か、もしくは-viewDidLoadで行うのが行儀良いのかな、たぶん(ちょっと自信がないけど、前者の方がタイミング的にいいのかも)。


文にまとめてみたら、だいぶん分かるようになりました。ポイントは、

  • -initWithNibNameの段階ではまだロードされない
  • viewプロパティorゲッターにアクセスされたときに初めてビューがロードされる
  • 自分でビューをセットアップしたい場合は-initWithNibNameでnilを設定しておいて、-loadView内でセットアップする

というあたりかな。


ちなみに

今回のおさらいには、書籍「iPhoneアプリケーションプログラミング*2」が役に立ちました。この本では、Cocoa touchで提供されている各クラスについて、


  • どういうときに使って
  • 提供するメソッドには何があって
  • それぞれどういう意味があるのか

が丁寧に書かれています。

プログラミングについてを「はじめてのiPhoneプログラミング*3」で学んだあとは(もしくは学びつつ)、この本で各クラスの理解を深めるのが近道だと思います。

(という流れで下のリンクを貼っていますが、勘弁してくださいませ)


 Website Temporarily Unavailable

  (Amazonインスタントストアへのリンク)


それにしても、iPhoneアプリを作る本は本当に増えてきました。私みたいにどんどん買うのもどうかと思いますので、皆さんはうまく情報を取捨選択していってください。

*1:注意:Amazonインスタントストアへのリンクです。

*2:注意:Amazonインスタントストアへのリンクです。

*3:これもそう。

ほしほし2009/06/30 05:05-initWithNibName:bundle: は xib ファイルを指定してビューコントローラを初期化するだけで、xib ファイルの読み込み (view の生成) は行いません。view の生成は view メソッド (プロパティ) が最初に呼ばれたときに loadView が呼ばれることによって行われます。たしか。(iPhone ではメモリを節約するために、本当に必要になるまでオブジェクトを作らないことが推奨されています。)

paellapaella2009/06/30 07:02コメントありがとうございます。なるほど、initWithNibNameはコントローラの初期化だけで、loadviewが呼ばれる(いよいよビューが必要になる)のはviewのゲッター(プロパティ)が呼ばれたときなんですね。

「初めてviewプロパティを使った時はどうも遅いな」と感じていた理由が分かりました。ありがとうございました。

KishikawaKatsumiKishikawaKatsumi2010/07/28 00:55データの初期化について、init は1回きりですが、viewDidLoad はライフサイクルの中で何度も呼ばれる可能性があるところが注意ですね。
繰り返し呼ばれても問題ないようにしておかないとリークしたりします。

paellapaella2010/07/28 01:27ありがとうございます。
読み返してみると、最初に動き始めるときの内容には注目しているものの、その後動いているときの振る舞いについては書いてありませんね。

書かねば。。。

JoeJoe2012/05/30 12:00God help me, I put aside a whole afetrnoon to figure this out.

uaruetjtyuaruetjty2012/05/30 18:24brBzX2 <a href="http://ejnkigxcfmet.com/">ejnkigxcfmet</a>

cnntmwcefcnntmwcef2012/06/01 00:317q5y4Z <a href="http://jidyxyoovhra.com/">jidyxyoovhra</a>

cpkhrbqicpkhrbqi2012/06/01 19:354a0ijC , [url=http://trwiwrucdnnu.com/]trwiwrucdnnu[/url], [link=http://kqcjjfkceyeg.com/]kqcjjfkceyeg[/link], http://nqoocquivfwr.com/

NobeNobe2012/11/22 12:29助かりました。ファイル名指定でinitして、”loaded XXXXX nib but the view outlet was not set.”が出続けていました。

edokogialelutedokogialelut2019/07/24 15:30http://mewkid.net/order-amoxicillin/ - Amoxicillin 500 Mg <a href="http://mewkid.net/order-amoxicillin/">Amoxicillin 500mg Capsules</a> oce.ulwo.iphone-dev.g.hatena.ne.jp.jvw.mw http://mewkid.net/order-amoxicillin/

idevogeidevoge2019/07/24 16:00http://mewkid.net/order-amoxicillin/ - Amoxicillin No Prescription <a href="http://mewkid.net/order-amoxicillin/">Amoxicillin 500mg</a> sdk.vejh.iphone-dev.g.hatena.ne.jp.xam.tg http://mewkid.net/order-amoxicillin/

2009-06-21

[iPhone][Books] 世界一のiPhone開発本の邦訳版が出るらしい 23:40  [iPhone][Books] 世界一のiPhone開発本の邦訳版が出るらしい - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Books] 世界一のiPhone開発本の邦訳版が出るらしい - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Books] 世界一のiPhone開発本の邦訳版が出るらしい - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

「世界中のiPhone本でもベスト」「こんな本を書きたい」と、世界中の開発者の間で実際に言われている本が日本語に翻訳されて出版されるとなれば、期待せずにはいられません。

「Beginning iPhone Developer」の邦訳版が出版されるようです。


 「はじめてのiPhoneプログラミング By Dave Mark, Jeff LaMarche

  (私のインスタントストア(英語版を元にしたプレビュー付きです))


ぜひぜひ、これまで日本語じゃないからと躊躇されていた皆さんも、この本から基礎を学んで、お互いにレベルアップしていきましょう!


とにかくこの本の特徴は、Cocoa touchに関係する「全て」の機能が、それぞれの機能だけで動かせるサンプルコードとともに載っていることです。

なのでリファレンスとしても使えますし、さらには各要素をどう発展させたら自分のアプリに組み込めるかが想像しやすくなっているという、ヒレガス本に勝るとも劣らない出来になっているのが特徴です。

以下をどうやって実現するのか興味がある人は、買って損の無い本だと思います。


 ・PickerViewを使ったスロット

 ・テーブルの削除、並べ替え、追加などの操作方法

 ・チェックマークのジェスチャを検出する方法

  ・スワイプ、ピンチインなども


ただ、この時期で心配になるiPhone OS3.0との間での懸念点も一応書いておきます(日本語版だと更新されているかもしれません)。

 ・3.0で新規に使える機能についての紹介はない(2.2.1ベース)

 ・テーブルセルにおいてtextプロパティを使っている

 ・ナビゲーションバーの取り扱い


とはいえそれは全500ページ強のごく一部の話ですし、3.0でも非推奨なだけで普通に使えるので、そんなに心配はいらないと思います。

(これで上記が3.0対応していたら神本だと思いますイヤマジデ)


本当に、本当にオススメです。

2009-06-16

[iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 22:19  [iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Develop] アプリ起動と同時にサウンドを鳴らす方法 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

アプリを幾つか触っていると、起動直後の画面(default.png)が表示されているときに音が鳴るものがあります。同じことを実現する方法が分かったので記録しておきます。


最初は「いいなぁ、かっこいいなぁ」と指を加えて色々悩んでいだのですが、気付けば簡単なことでした。

main()関数の、UIApplicationMain()を呼ぶ前に音を鳴らす処理を入れるだけでした。


以下は、AppleのサンプルにあるMetronome.xcodeprojに手を入れたソースです。


int main(int argc, char *argv[]) {
	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

	// アプリ起動と同時に音を鳴らす
	NSAutoreleasePool * innerPool = [[NSAutoreleasePool alloc] init];
	SoundEffect *tickSound = [[SoundEffect alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tick" ofType:@"caf"]];
	[tickSound play];
	[innerPool release];
	// ここまで

	int retVal = UIApplicationMain(argc, argv, nil, nil);
	[pool release];
	return retVal;
}

これだけで起動と同時に音が鳴るようになります。


ちなみにSoundEffectクラスはこのプロジェクト内で定義された、中で単にAudioServicesCreateSystemSoundID()を呼んで再生するだけのクラスです。なのでベタ書きで同関数とAudioServicesPlaySystemSound()を使う方法でも大丈夫。またAutoReleaseプールも念のために入れているだけで、無しでも動くことを確認しています。

(AVFoundationやOpenALなども試せれば良かったのですが・・・すみません)


実際に音を鳴らしてみると、けっこう待たされる感じのするスプラッシュスクリーンでも短く感じる効果が得られました。例えば「Now loading...」とか「気にしない気にしない、一休み一休み*1」と喋らせておくのも面白いと思いますが、いかがでしょう?


サウンドといえば、こんな本を買いました

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理」という本。大学で学ぶ信号処理の関連本ではあるものの、なんとこの本にはリバーブディストーション、ファズ、ワウ、ビブラート、コーラス、早送り/スロー再生などなど、様々なエフェクトの説明と実現方法がCソースコード付きで載っていました。


この本で扱っているデータがWAVEファイルなので少しの修正は必要ですが、なかなかに夢の広がる本でした。おすすめです。


 − Website Temporarily Unavailable

*1:元ネタを知っている人が少ないことが切ない・・・

2009-06-14

[misc] iPhoneアプリケーションではデザインがもっとも重要と思っている人へ 23:42  [misc] iPhoneアプリケーションではデザインがもっとも重要と思っている人へ - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [misc] iPhoneアプリケーションではデザインがもっとも重要と思っている人へ - Ni chicha, ni limona - 平均から抜けられない僕  [misc] iPhoneアプリケーションではデザインがもっとも重要と思っている人へ - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

QuadCamで、というよりFlash技術で有名なfladdict氏が「404 error - File Not Found」という記事を書いています。なかなか良い記事だと思います。

しかしながらこの記事、すごく誤解を与えかねない内容になっているので、僭越ですが補足と若干の反論をさせてください。

※なお以下に書いてあることは、当たり前の人にとっては当たり前の内容です。

でも、fladdict氏の謂わんとする本意が伝わっていないかもしれない人のために、あえてこのiPhoneデベロッパーグループのブログで書こうと思います。

*1


0.修正履歴

(2009/06/14)nanashiさんから、「広告と言う筋肉増強剤」という表現が広告をバカにしていないか、という指摘がありました。

たしかにそのとおりで、筋肉増強剤というのは違法的な側面を強調する表現でした。そう取られても仕方がありません。大変失礼しました。→ 関係諸氏

意図としては「開発者がかけたコストを10にも100にも出来得る可能性を持ったメディア」という意味で書きたかったのですが、先の表現では伝わるわけがないですね。


失礼しました。そして、指摘していただいたnanashiさんに感謝します。


(2009/06/15)考えてみれば、「テクノロジー」として私が考えている意味を暗黙知のように扱ってしまい、きちんと説明していませんでした。

追記しました。


(2009/06/16)iPhoneアプリだとSingingCatで有名なid:frnkさんも同様の話題について所感を書いてくれました。「id:frnk:20090615」です。frnk氏は技術者デザイナーのどちらの足場も持っている方(だと勝手に思っている)なので、うまく今回の問題点を引っ張り出して、なおかつ私よりも大人の論評をしてくれています。ぜひ読んでみてください。

ありがとうございます。


1.補足編

まず何より重要なこと。

それはfladdict氏が言っている「デザイン」の単語定義について。


ここでのデザインとは、

自分が伝えたいメッセージ、技術をつたえるための姿や形、その振る舞い」

もしくは

ユーザーが求める行為を構成する全ての要素

という意味で使われています(そのはずです)。


つまり、我々一般人がデザイナーという単語から連想する、「自分のポリシーだけを押し付けて、内部の機能とかはどうでもよいものを作っている人達」ではないのです。*2

デザインとは見せかけだけのものではなく、上っ面のものではありません。1つのアプリケーションが提供する全てを伝える、いや伝えられる内容になっているかを決める行為こそが「デザイン」の指す領域です。


件のブログを読んで「なるほど。クールな画面、かっこよいユーザーインタフェースが最も重要。中身は(見た目と比較して)優先度が低いんだ」と思ってしまった方、それは大間違いですからね。


繰り返しますが、

  1. 伝えたい事柄があって、
  2. それをどういう技術や見た目、振る舞いで実現するか

を考えて実現する行為がデザインです。ご注意ください。


えーと、ここまではいいですかね。では、反論です。

2.反論編

氏の記事中、こんな記述がありました。

1年ほど自分で製作してみた実感でも、テクノロジーはそれほど重要ではない印象。

これはですね、大きく誤解を与えてしまう文章だと思います。この表現だとテクノロジーがデザインから分離してしまい、さも「デザインの見た目部分だけが重要」と言ってしまっているようなものです(実際、オレンジニュースでも「これからアプリはデザインがもっとも重要」なんていう飛ばしタイトルを出されていますし)。


先に記したとおり、デザインとはテクノロジーも包含した概念です。なのに、ここで敢えてデザインとテクノロジーを分けてしまうのはまったくもって遺憾です。テクノロジーによって要望を実現できる道具が提供できているのに。


【2009/06/15追記】ちなみにここでの「テクノロジー」とは、先端技術や匠の技といったようなものではなく、「ある機能を実現・提供する技術」として取り扱っています。ハードウェア的な技術(動画撮影のからホームボタン)もあれば、ソフトウェア的な技術もあります。

ですので、最先端テクノロジー・難解な技術という形容詞がついて、はじめて高尚なものであるという意味を持つと考えています。【追記終わり】


そう、テクノロジーがあるからこそ今のiPodが存在し得る状況になっていることを忘れてはいけません。

例えば氏のQuadCamだって、iPhoneに搭載されている超小型のカメラというデバイス、その(レンズやセンサの性能上)ノイズだらけの画像をなんとか見える絵にしているドライバというテクノロジーがなければ、アプリそのものがデザインできない状況になっていたでしょう。

逆のたとえを出すならば、連射による画像の作成というユーザーエクスペリエンスを提供するだけの技術/能力をfladdict氏が持っていたからこそ、QuadCamというアプリケーションが発生したわけで。


余談:私のiPhoneで初めて作成/リリースした「Mosquito Attack」という、「蚊のうっとうしさを体験してもらう」メッセージを持ったアプリが何と全世界で41本も売れたのも、その程度の技術しか持っていなかったことを考えてほしいわけです。はい、すみません


・・・というわけで、fladdict氏のブログでは


  • デザインをとても本質的な意味で表現している

にも関わらず、


  • 「テクノロジー」を表面的な意味でしか用いていない

ことが気になりました。


包含/依存関係を持つ2つの単語を、注目しているレイヤーが全然違ったままで使用していることに気付いてほしいなと思います。


3.そもそも論的なまとめ

開発色の方なら分かると思いますが、開発の中で言う「設計」って、英語では「デザイン」と言いますよね。要望や理想をどうやって実現するかを決めることが設計であり、デザインです

広告という筋肉増強剤を無視すれば、【←次に書き換え】開発者の込めたメッセージの伝達能力を正確もしくはそれ以上に伝えてくれる媒体の話を抜きにして表現すると(nanashiさん、ご指摘ありがとうございました)【書き換えここまで】、


 「要望を実現するテクノロジー」×「要望を提供するデザイン・品質」=「製品の強さ」


という公式が成り立つわけで。*3


4.おまけ

ここでいつものようになぜか私のAmazonマイストア(UIについて考える編)へのリンクが貼られてくるわけですが、そこはあの、お察しください。


 − Website Temporarily Unavailable

*1:とはいえ私も本人に聞いたわけではないのですが、20回くらい繰り返し読んで咀嚼したのでそんなにズレていないはず。

*2:しかし、そういう人も残念ながら一部にはいます。申し訳ありませんが論外です。

*3:ちなみにビジネスで考える場合、左辺の分母として「かかったコスト」が入ってきますが、ここでは話題からずれるため敢えて除外しています。

nanashinanashi2009/06/15 01:30デザインもテクノロジーも大事と言うことはよくわかりましたが、
>広告という筋肉増強剤

これ、広告バカにしてね?

デザイン大事デザイン大事2009/06/15 02:42すみませんが、この記事こそ誤解をあたえてしまうように思いますよ。
多分あたな自身も色々誤解している。

paellapaella2009/06/15 05:06nanashiさん、デザイン大事さん、コメントありがとうございました。

nanashiさん:
ご指摘ありがとうございます。確かにこの内容ではバカにしているように受け取られても仕方の無い表現です。
冒頭の修正履歴で、諸氏へのお詫びとともに記述を修正しました。

デザイン大事さん:
なるほど、その指摘こそが私が凡プログラマでしかない理由なのかもしれません。よろしければ、
・どこの記述が誰(何)に対して誤解を与えてしまう内容か
 - こうすべき、という指摘もあればぜひ
・デザイン大事さんの考える「開発に何が重要か」に対するご意見
を教えていただけないでしょうか。コメントしてもらえるとボク個人が嬉しいですし、iPhoneアプリ開発者にとっても有益な情報になると思っています。

omaemona01omaemona012009/06/15 05:51自分がン十年働いている職業があったとしてですね。
一年という僅かな期間で見識を語られてもあまり良い気分はしないんじゃないかな?

1年ほど自分で販売してみた実感でも、営業はそれほど重要ではない印象。
1年ほど自分で宣伝してみた実感でも、広告はそれほど重要ではない印象。
1年ほど自分で発案してみた実感でも、デザインはそれほど重要ではない印象。

各々方の心中はどんなもんでしょう?
プログラマ的には「gdgd言ってないでコード書けよハゲ」(byひがやすお)に尽きるんですがw

十織 須芽里十織 須芽里2009/06/15 11:06今ひとつ、何が仰りたいのか分からないですね...

そもそも、fladdict氏の言うデザイン定義が
「自分が伝えたいメッセージ、技術をつたえるための姿や形、その振る舞い」
「ユーザーが求める行為を構成する全ての要素」
という事とは思わない。

一般的「デザイン」というイメージ
「自分のポリシーだけを押し付けて、内部の機能とかはどうでもよいものを作っている人達」
とも思わない。

私もデザイナーですが、「デザイン」とは単純に言えば
「意味内容」を「意味するモノ」に変換する作業(一般的には、ビジュアルデザイン的には)視覚化する作業の事を指します。

但し、その表層の「意匠」のみを「デザイン」として一般多数の方が認識している。

ですので、fladdict氏の仰っている「デザイン」とは「ビジュアルデザイン」の話をされているだけの事ではないでしょうか?

paellapaella2009/06/15 11:09omaemona01さん、コメントありがとうございます。

私のもそうですが、ちょっとミスリードを誘う文章で、さらには知ったかぶったような表現になってしまうところで問題はありそうですね。

> プログラマ的には「gdgd言ってないでコード書けよハゲ」(byひがやすお)に尽きるんですがw

ハイ、ほんとスミマセン(なんて言うか、私もハゲ候補ですし)w。myアプリもわけ分からないもの1本しか出していないのに説得力無いですもの。

khirohiskhirohis2009/06/15 11:38以前、fladdict さんがファイルサーバを実装したいというので WebDAV の RFC を提示したことがありましたが、その反応が「作ってもらうとしたら幾らだろう」といったものでした。
想像するに fladdict さんのいうテクノロジにはそういった低レベルなロジックは含まれず、ある種のコンポーネントの組み合わせを記述するだけというように捉えてるのではないかと
(氏のリリースされているアプリを見ても伺えますよね)

誤解のないよう補足しておきますが、そういったアプリを否定しているのではありません

fladdictfladdict2009/06/15 14:28だいたい仰るとおりかと思います。ただ一応、意図を補足します。

自分の中では、テクノロジーというのは純粋に目的達成の手段であって、デザインにテクノロジーがフォローしても、逆はあまりうまくいかないと考えているからかと思います。

khirohisさんの書いたwebdavの件も、webdavは単なる手段であって、同じことができるならftpでもp2pでもなんでもよいと考えています。代替可能かつ既存の技術であれば、車輪を再発明することに意味はありません。金銭コストだけで解決できるならそうして、人的リソースは代替不可能な部分につぎ込むべきだと考えるからです。

連射カメラを作るという戦術レベルのデザインでは、「連射」という技術は切り離すことはできませんが、iPhoneのカメラを再提案するというグランドデザインのレベルで見た場合、連射は単に選択肢の1つにすぎず、技術的に難しければ他の面白いカメラアプリを作ってしまえばよい、と考えるのが自分のやり方です。

whitedevwhitedev2009/06/15 16:46>fladdictさん
商品としてデザインが重要であることは、iPhoneアプリに限らず他のものでも同様なので理解できますが、それと対比させるためか「テクノロジーはそれほど重要ではない」というのは残念でなりません。

↑のコメントでは、既存のテクノロジーをうまく使い回すような意見になっていますが、元の記事の「100万円の低機能ペン」というのは低テクノロジーで成り立つ商品、ということを表現してますよね。

似非iPhone のように、デザインが多少良かったとしても、それと同調するようなテクノロジーの下地がなければ、iPhone にはなれないのではないでしょうか。

paellapaella2009/06/15 16:53皆様ありがとうございます。fladdictさんまでわざわざ出向いていただいて、申し訳ないです。

# 今回の一番の収穫は、色々な立ち位置の方の「デザイン」と「テクノロジー」という単語が持つ意味を知れたことです。fladdictさんにとって悪い流れになってしまっていたら本当に申し訳ないのですが、貴重な経験が出来ています。

タイムラインの流れに沿って、皆様に返答させてください。

十織 須芽里さん:
まず私の返答時間が重なっていたために無視したような展開になっていたこと、失礼しました。お詫びします。
さて、今回焦点になっている「デザイン」に対して、デザイナーという私には無い視野・知識分野を持っている方の意見はとても参考になりました。ありがとうございます。

なるほど、デザイナーにおいてデザインとは
> 「意味内容」を「意味するモノ」に変換する作業
なのですね。そして、モノが何かはビジュアルデザイナーであれば可視化されたモノである、という。

その視点で考えれば、私の書いた

> 「自分が伝えたいメッセージ、技術をつたえるための姿や形、その振る舞い」
> 「ユーザーが求める行為を構成する全ての要素」

という表現はちょっと違いますね。「自分が〜」で始まっているのは何とも独り善がりですし、後者はちょっと曖昧。

ただ、私とあなたとのデザインが持つ意味の捉え方、そんなに違いがあるように思えませんでした。
1レイヤ上げたときに、「意図を具象化する」という考え方は同じではないかと思います。

実は私たち開発者も、お客様の「こうしたい」「ああしたい」を実際に動くサービス・ソフトに変換する際の作業を「デザイン(設計)」と呼んでいるのですよ。
(iPhoneの辞書アプリを作っていらっしゃる物書堂の方も「デザイナさんには恥ずかしいのですが」という前置きと共に設計をデザインと呼んでいるとTwitterに書いていました)
しかし今回、私はそのスタート地点を拡大解釈したものを「デザインとは云々」と定義してしまっていて、さも一般言語のように書いていることは問題でしたね。
反省します。

> 但し、その表層の「意匠」のみを「デザイン」として一般多数の方が認識している。

ここは私も問題認識しています。そして、そういう認識を持たせてしまうモノしか作っていないデザイナーが目立ってしまうときがあることにも問題があると思っています。これはデザイナーでも私たちでも双方に潜在する問題です。
(TVドラマで「コンピュータウィルスに感染した!」が画面上にドクロマークという状況だったり)
ですので敢えて「マスではこのような認識しか持っていないから気を付けましょうね」という思いを込めて論外云々の件を書きました。
そこはどうかご容赦ください。

開発者(やコンピュータに詳しい人間)が当然と思っていることがマスにおいてはそうではない、という自分たちへの警鐘も含んでいますので。

> ですので、fladdict氏の仰っている「デザイン」とは「ビジュアルデザイン」の話をされているだけの事ではないでしょうか?

だとしたら逆に問題ですよね。何がって、マスには通用しない文章がその認識のままで広がってしまっていることがです。

それが今回の記事を起こした背景にあります。
fladdictさんの意見を否定しているのではなく、展開している言語の定義を正確にしたかったのが、今回の目的です。
# ですので実際のデザイナーの方としての意見、というのは有り難かったです。また通りすがってください。

回答になっていますでしょうか。

−−−
スミマセン、いったんここでコメントを投稿します。続きをすぐ書きます。

paellapaella2009/06/15 18:11続きです。こんな長くなってしまうと、肝心の皆さんの意見が隠れてしまって良くないですね。もう少し端的に表現できるようにします。
あと、冒頭に「知れた」と書いてますが正しくは「知られた」ですね。恥ずかしい・・・。

khirohisさん:
コメントありがとうございます。khirohisさんの直後にfladdictさんが回答されていますので、私からのコメントは控えさせてもらいます。
明らかに蛇足になってしまいますから、すみません。
でも、コメントいただけたのは本当に嬉しいですので、またお越しくださいね。

※ちなみにfladdictさんの「何にリソースを割くか」は、私のように「プログラミング大好き。iPhone面白い」という視点だけで取り組んでいる人にとっては重要な意味を持つ言葉だな、と思っています。

fladdictさん:
そちらのページには何もコメントせずにおいて、スミマセン。正々堂々と議論すべきだったと反省しています。

> だいたい仰るとおりかと思います。ただ一応、意図を補足します。

そうでしたか。大きなズレがなくてほっとしました。

> 自分の中では、テクノロジーというのは純粋に目的達成の手段であって、デザインにテクノロジーがフォローしても、逆はあまりうまくいかないと考えているからかと思います。

うーんどうでしょうね。これは、どの領域を対象にするかだと思います。
テクノロジーにデザインという変換が入ることで、時代を変えるほどのイノベーションが起こせた領域もありますし。
・・・あ、でもデザイン(目的)のないテクノロジーに対してデザインすることは「ハイリスク・ハイリターン」であると言えるかもしれません。
そんな認識で合っていますでしょうか。

> khirohisさんの書いたwebdavの件も、webdavは単なる手段であって、同じことができるならftpでもp2pでもなんでもよいと考えています。代替可能かつ既存の技術であれば、車輪を再発明することに意味はありません。金銭コストだけで解決できるならそうして、人的リソースは代替不可能な部分につぎ込むべきだと考えるからです。
> 連射カメラを作るという戦術レベルのデザインでは、「連射」という技術は切り離すことはできませんが、iPhoneのカメラを再提案するというグランドデザインのレベルで見た場合、連射は単に選択肢の1つにすぎず、技術的に難しければ他の面白いカメラアプリを作ってしまえばよい、と考えるのが自分のやり方です。

このご意見は、我々プログラマが陥りがちな「このロジック、イカしてるだろ症候群」(今命名)に対する批判として、真摯に受けとらせてもらいます。
顧客にとっては要求を満たしているかが重要なのに、ついつい内部の枝葉末節にこだわってしまうことがよくありますので。

けれどもコレを徹底しすぎると、やがて基礎が崩れてきてしまうんですよね。地に足の付いた話が出来なくなってしまう。ご自身もFlashなるテクノロジーにリソースを割いているからお分かりになっていると思いますが、匙加減ですね。
あと文房具や鞄のブランド化ですが、元は確かな品質から産み出される信頼の積み重ねだったのに、次第に名前だけが一人歩きしてしまうことがあるので注意が必要だと思います。
アポトーシス、もしくは重力崩壊してからではただの老害ですからね。

とにもかくにもコメント、そして考える機会を与えてくださってありがとうございました。

whitedevさん:
コメントありがとうございます。

同じ技術屋(私は端くれですが)として、whitedevさんのお気持ちも分かります。実際、fladdictさんのブログを何回も読み返しているとき、最初は感情的になってしまっていましたから。今は反省しています。

知り合いの鞄屋さんが、鞄の展示会に出展したときに参考情報として、Louis Vuittonの鞄をばらして展示し、その革の加工技術、縫製技術の高さを参加者や同業者に伝えようとしたんだそうです(大成功だったみたいです)。

えっと、何が言いたいかというと、やがて自分がブランド化できたときにも、その品質を維持していたいですね、という話です。
アウトプットのできる匠になりたいなと思っています。
(いつかwhitedevさんに追いつき、追い越しますので(!)待っていてください)

十織 須芽里十織 須芽里2009/06/15 19:06私も少し言葉足らずだったようで補足します。

デザインの定義として
「意味内容」を「意味するモノ」に変換する作業を「記号化」すると言います。
これは、単純に「言葉」だったり「文字」だったり「絵」だったり「音」だったりします。
その複合された形、もしくはコミュニケーションレベルに達した状態を「コード化」するだったりするのですが
paellaさんの仰る「開発者(この場合プログラム?)」もそうだったりするのですね。

本来デザインとは、商業ベースに成り立っているので「意味内容」は当然マスに向けられた「客観的」視点に立ったものです。
アートとの差は同じ「記号化」する作業でもこの点が違う所です。

ですので

>(TVドラマで「コンピュータウィルスに感染した!」が画面上にドクロマークという状況だったり)

この表現は、マスに向けられた「象徴的(シンボリック)」な、コード化されたデザインの良い例ではないでしょうか?
実際Macも「サドマックマークが出たりしました。(今も出るのかな?)」

fladdict氏が仰っている
「これからアプリはデザインがもっとも重要で、開発時間の大半をデザインに充てるべきだ」、ということだった。 1年ほど自分で製作してみた実感でも、テクノロジーはそれほど重要ではない印象。

というもの、単純に解釈するならば、「テクノロジーによる機能てんこ盛り」より「視覚的効果」が有効だとさ、と言ってるだけでそんな目くじらを立てるまでもないかな?と感じたものであえて物申してみました。

「100万円の低機能ペン」の話も「低テクノロジーで成り立つ商品」と言ってるのでは無く、「1」のモノも視覚効果によりそれ以上の商品価値のあるものに見せる効果があるので有効だよ、と言ってるだけじゃん。

fladdictfladdict2009/06/15 22:21>whitedevさん
いや、それは逆でしょう。 iPhoheはリリース当時、テクノロジー的には全て枯れた技術で、日本の携帯の機能性には足下にも及ばない。という評価が一般的だったと思いましたが。wiiとかもそうですよね。

paellapaella2009/06/15 23:02十織 須芽里さん、fladdictさん、たびたびのコメントありがとうございます。
ちょっと火事の臭いがしてきてしまったので、少し火消しのポジションを置きつつ返答させてください。

あしゃbpz

paellapaella2009/06/16 00:04すみませんすみません!目を離したスキに寝ぼけた息子が勝手に投稿してました!><

息子(1)はとてもかわいいので、それに免じて許してください。

−−−
十織 須芽里さん:
わざわざ補足までしていただいてありがとうございます。シチュエーションに沿った説明、というのは本当に腑に落ちてきますね。

> デザインの定義として
> 「意味内容」を「意味するモノ」に変換する作業を「記号化」すると言います。
> これは、単純に「言葉」だったり「文字」だったり「絵」だったり「音」だったりします。
> その複合された形、もしくはコミュニケーションレベルに達した状態を「コード化」するだったりするのですが
> paellaさんの仰る「開発者(この場合プログラム?)」もそうだったりするのですね。

はい。そうなんです。そして、うんやっぱり同じです。

顧客の
「バーンと打ったらビューンと飛んでワーッてなるものをお願いします」
という要求を、
「このときはこうで、あのときはああで、でもコレとアレとはこのタイミングの時には同時には成り立たない」
というルールの集合に落とし込み、それを顧客のイメージと同じ「バーンと打ったらビューンと飛んでワーッてなるもの」を実現するのが開発者の仕事です。
似てますよね?

> というもの、単純に解釈するならば、「テクノロジーによる機能てんこ盛り」より「視覚的効果」が有効だとさ、と言ってるだけでそんな目くじらを立てるまでもないかな?と感じたものであえて物申してみました。

そうだったんですね。コメントのコンテキストが分かりました。
確かに機能てんこ盛りは無駄ですね。その点では視覚的効果、もしくは感性に訴える部分を作り込んだ方が有効です。これは激しく同意です。

ただし開発者、いや、以降は技術者と言わせてください、技術者にとってのテクノロジーの美意識も「機能てんこ盛り」には無いんですよ。技術者もデザイナーと同様に極限まで無駄を省き、本当に顧客に訴えかけるエッセンスを作ることに対して美意識を持っているのです。はたして技術者もミニマルであることは重要と考えていて、余計な機能は悪なのです。
(プログラムという言語を相手にしているので、いかに美しい文か、というのについつい拘ってしまうのが問題なんですが)

ちなみに技術者にとっての「高機能」とは、機能の数が多いことではなく、機能の質が高いことを表しています。ややこしいですが、お察しください。

で、それを技術者にとっては「色温度?光なんてどれも同じでしょ?テクスチャにこだわる必要もないし」「日本画って要は岩絵具を使って書けば(not 描けば)いいんでしょ。天然と人工なら安い方で」というように取られかねない内容でスタートしてしまったところに、今回の目くじらの発端があったわけで。
(あ、大丈夫です。私は色彩検定(3級ですが)を持っていますし妻は日本画家ですので、こんなことを言ったら怒髪天を突かれるのは承知しています。あとfladdictさんの記事も感情に任せて本意を逃さないよう何回も読んでいます)
元は「こんな風に誤解してはいけないです。でもちょっと誤解されかねない内容ですね」というのが私の意図でした。
(しかしながら広告に対してドーピングと言ってしまったのは私の落ち度でした。すみません)

# なので「TVドラマでコンピュータウィルスが〜」というのも、PCで動くものに対して人生の何分の一かを賭けている人にとっては「コンテキストを無くしたいい加減な抽象化」を対象に投影されたということで噴飯ものなんですよ。

たぶん、あなたのようにコメントを残すエネルギーをお持ちの方でしたら、今回の件に私たち技術者が物申していることを理解してもらえると思っています。視点の違いだけなのです。

というわけで、

> 「100万円の低機能ペン」の話も「低テクノロジーで成り立つ商品」と言ってるのでは無く、「1」のモノも視覚効果によりそれ以上の商品価値のあるものに見せる効果があるので有効だよ、と言ってるだけじゃん。

についても、「何となく火が出そうな表現だなぁ」というのが分かっていただけるかと思います。

まぁとにかく、またとおりすがってくださいね。あなたの立場からのコメントは、私に取ってはとても貴重な情報ですので。

paellapaella2009/06/16 00:59fladdictさん:
> いや、それは逆でしょう。 iPhoheはリリース当時、テクノロジー的には全て枯れた技術で、日本の携帯の機能性には足下にも及ばない。という評価が一般的だったと思いましたが。wiiとかもそうですよね。

いや、それもまた技術者にとっては火を吹いてしまう表現なんで勘弁してくださいw。

まず枯れたテクノロジーというのは高機能に勝るものですよ。品質が安定していたり、他製品との相性が出にくかったり性能がチューニングされていたり。高度に鍛造されたものだと考えていただくと良いと思います。
しかしそこまで至るには長い時間がかかっています。ここは本当に人間と同じで、ノービスとエースとでは何もかもが全然違うようなものです。それに機能が多いor新しいは何の魅力にもならないことはご存知でしょうし、技術者も理解している事柄です。

iPhoneやWiiのすごいところは、それらの技術を更に徹底的に隠す技術にあると思います。ビジュアルデザインだけでは解決できないメディアを、ビジュアルデザインとテクノロジーとで共に作り上げてしまった。どちらもデザインが良いのに、テクノロジーも同じレベルでまとめあげた。
これってかなりのハイテクノロジーだと思うんですが、いかがでしょう?


・・・とここまで書いてきて、なんだか「デザインvsテクノロジー」みたいな構図に誘導してしまっていたことに気が付きました。そうではなくて、どっちも重要なことですよね、分かります。

ちなみに私はfladdictさんの仰る「自分のやり方」を否定するつもりは毛頭ありません。
その考え方は経営において必要なものですから。

ネオニート。はたして中々に大変だと思いますが、がんばってください。長野から応援しています。

fladdictfladdict2009/06/16 23:23僕の中ではテクノロジーとエンジニアリングは概念として別れていて、 paella さんの書いていることがどちらかというとエンジニアリングに属するものだと思っていました。

テクノロジーを否定しただけのつもりだったのですが、それがエンジニアリングやエンジニアの否定として解釈されていたのは、ちょっと残念でした。

自分自身としては、一応工業大学を出たり、工業デザインを専攻していたので、エンジニアリングの重要性は承知しているつもりです。

デザイナとエンジニアの落としどころをうまく見つけたいのですが、やっぱりいろいろと難しいですね。

paellapaella2009/06/17 00:10fladdictさん:
たびたびコメントありがとうございます。あと何より、WWDC参加はお疲れさまでした。UStreamで少し拝見しましたよ。

> 僕の中ではテクノロジーとエンジニアリングは概念として別れていて、 paella さんの書いていることがどちらかというとエンジニアリングに属するものだと思っていました。
> テクノロジーを否定しただけのつもりだったのですが、それがエンジニアリングやエンジニアの否定として解釈されていたのは、ちょっと残念でした。

なるほど、いよいよもって伝えたかったことの核心が分かって来たような気がします。私の書いた追記部分はテクノロジーへの言及、iPodの話についてはエンジニアリングへの言及と、話がふれてしまっていましたね。
大元はfladdictさんの「デザインが重要とは」を咀嚼して展開する意気込みでしたが、関係ない方向にまで話を展開させてしまったようです。すみませんでした。

それに技術者としてのエンジニアリングの重要性をご承知でしたら、なおのこと遺憾だったと思います。お察しすると同時に、汲み取りきれなかったことをお詫びします。


でも、どうなんでしょう。エンジニアリングを立てたまま、テクノロジーだけを否定することはすごく難しくありませんか?

なぜかといえば、私の理解では「エンジニアリングという行為によって生み出されたものがテクノロジー」というイメージがあって、つまりは親子(もしくは依存)関係があると思っているからです。

ここが違っているとなると問題ですが(主に私の認識の方で)、この仮定のままでもうちっと話を進めさせてもらいますと、エンジニアリングを行使するエンジニアが作成したテクノロジーにはたいてい愛着があり、その否定は我が子を否定されたかのように捉えられてしまいかねません。
けっこうデリケートな部分であることは否めないと思います。もちろん、触れるなという意味では決して無いですよ。

−−−
デザイナとエンジニアの落としどころは、今回の皆さんとのやり取りを見ただけでも相当に難しいことだと思いました。ピープルウェアですね。

2009-06-11

[iPhone] 紙上でUIデザインするときの実寸大iPhoneスケッチPDFを作ってみました 10:23  [iPhone] 紙上でUIデザインするときの実寸大iPhoneスケッチPDFを作ってみました - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone] 紙上でUIデザインするときの実寸大iPhoneスケッチPDFを作ってみました - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone] 紙上でUIデザインするときの実寸大iPhoneスケッチPDFを作ってみました - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント


連絡:このiPhone UIデザインシートの第2弾を作成しました。2009/8/11の日記に載せたシートも併せてご利用くださいませ。


紙上でiPhoneUIをデザインすることは良くあります。毎回適当に四角を書いてイメージを描いていたのですが、やっぱりどうにも実物との違いが出てしまう。


そこでOmniGraffleステンシルを使って実寸大のiPhoneイメージ(PDF/A4/388KB)を作成しましたので、よしなに使ってあげてください。画像イメージは↓で、ダウンロードは私のサイトのこちら「http://cielo.rojo.jp/images/iPhoneSketch_6.pdf」からどうぞ。


f:id:paella:20090611100008p:image:h360


ちなみにOmniGraffleは本当に便利ですよ。こういうステンシルがユーザーの善意でno titleというサイトにアップロードされているので、色々なパーツが目的に応じて探せます。たとえば今回紹介したiPhoneも、各パーツも一緒に用意されているので配置してみたり、他にももっとリアルなバージョンがあったりと。

同じ図をVisioで描いたとしても、それよりもキレイな図が描けるのも特徴です。;-)


UMLや各種ダイアグラムも完備してますので、開発者ならばぜひ1つは持っておくことをオススメします。


ちなみに選ぶのならProfessional版をオススメしておきます。ちょっとお高いですがStandard版に比べてかなり自由度が高いですし、やりたいことができるので選ぶならProfessionalの方です。

余計なところで労力を注ぎたくはないですよね?


−−−


さて、ここでまたもや突然私のAmazonストアへのリンクが貼られていますが、まあその、察してください。


 「Website Temporarily Unavailable

2009-06-09

[iPhone][OpenAL] OpenALで音を鳴らした時の遅延時間を調べてみた 23:20  [iPhone][OpenAL] OpenALで音を鳴らした時の遅延時間を調べてみた - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][OpenAL] OpenALで音を鳴らした時の遅延時間を調べてみた - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][OpenAL] OpenALで音を鳴らした時の遅延時間を調べてみた - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

iPhoneで音周りを扱おうとすると、


 「OpenALは遅延が小さいよ」

 「サウンドやるなら最低OpenAL使わないとね」


なんていう声が聞こえてくるわけですが、実際のところどれくらいの負荷がかかっているかよく分かっていません。ひょっとしたらそんなことはないかもしれないのです。

そこで『再生から処理が戻ってくるまでの時間』という視点で調べてみることにしました。


ソースコードは以下のとおり。

	NSDate *from = [NSDate date];
	alSourcePlay(alSourceID); // ここをコメントアウトした場合も計測する。
	NSLog(@"elapsed time:%f",[from timeIntervalSinceNow]);

これだと負値が出てしまいますが、そこはスルーしておきます。


なお音声ファイルに使ったのは16bits/monoral/22.05kHz/caf形式のファイルです。たぶん、皆さんが一番使っているタイプのフォーマットではないかと勝手に思っています。


結果

以下のとおりでした。

どう受け取るかという点では、予想していたよりも1桁速かったのが嬉しい誤算。


デバイス遅延(サウンド再生)遅延(NSDateとNSLog()だけ)
Device200-500μsec50-60μsec
Simulator約50μsec10μsec以下

だけど・・・、うーん、ちょっとSimulator*1は速すぎるかな、と。シミュレータはパフォーマンステストには全然使えないことが分かりました。

まとめ

  • OpenALのサウンド再生では、処理復帰までに200-500μsecの遅延がかかる。
    • 思っていたよりもOpenALの処理復帰は速い
  • NSDateやNSLogもぼちぼち時間がかかる原因にはなっている
    • リリース前に消しておけるようにしておくことも重要

あと、初回の再生だけ少し時間がかかっていたのを念のために書いておきます。

*1iMac Core2Duo 2.0GHz

2009-06-08

[iPhone][Develop] 自前でピンチイン/ピンチアウトを実現する 22:12  [iPhone][Develop] 自前でピンチイン/ピンチアウトを実現する - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Develop] 自前でピンチイン/ピンチアウトを実現する - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Develop] 自前でピンチイン/ピンチアウトを実現する - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

日本のiPhone SDK本ではあまり書かれていない、ピンチインやピンチアウト(写真を拡大したりするときのアレですね)を実現する方法をメモとして残しておきます。


タッチ開始と動いたときにNotifyされるメソッドでの処理が肝です。


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([touches count] == 2) {
        NSArray *twoTouches = [touches allObjects]; // 全タッチ情報を取得
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];
        initialDistance = distanceBetweenPoints( // タッチ開始位置を記録
            [first locationInView:self.view],
            [second locationInView:self.view]);
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([touches count] == 2) {
        NSArray *twoTouches = [touches allObjects]; // 全タッチ情報を取得
        UITouch *first = [twoTouches objectAtIndex:0];
        UITouch *second = [twoTouches objectAtIndex:1];
        CGFloat currentDistance = distanceBetweenPoints( // タッチ位置
            [first locationInView:self.view],
            [second locationInView:self.view]);

        if (initialDistance == 0.0f) { // 最初が同じ点なら距離を更新
            initialDistance = currentDistance;
        } else if (currentDistance - initialDistance > kMinimumPinchDelta) {
            NSLog(@"ピンチアウトを検出");
            // よしなに色々なことをする
        } else if (initialDistance - currentDistance > kMinimumPinchDelta) {
            NSLog(@"ピンチインを検出");
            // よしなに色々なことをする
        }
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    initialDistance = 0.0f; // 距離をリセット
}

ここでの距離を計算する関数はともかくとして、マクロ定数がどれくらいを適当な値とするか、自分のアプリでの使い勝手をみて調整するのが良いと思います。

タッチしている数を調べて、あとは距離を測るだけというけっこう簡単な内容ですね。touchesのオブジェクト順が心配であれば、ポインタの値を覚えておくのも良いと思います。

(同じ指でのタッチイベントは同じポインタでイベントが発生します)


ちなみにこのコード、洋書「Beginning iPhone Development」で紹介されているコードをベースにしています。この本では、他にもスワイプやチェックジェスチャの認識方法なども書かれていますので、そのあたりが気になる方は購入をお勧めします。

iPhone 2.2.1までの集大成的な本になっていますよ。


ここでなぜかボクのAmazonストアのリンクを貼っておきますが、まあそのアレです、察してください。


  Website Temporarily Unavailable