<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GRAM &#124; グラム</title>
	<atom:link href="http://www.brooklyn.jp/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.brooklyn.jp/blog</link>
	<description>Build Inter-Communication through Designing</description>
	<lastBuildDate>Mon, 20 Jun 2011 05:45:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Optimus Pad に apk をインストール</title>
		<link>http://www.brooklyn.jp/blog/android/optimus-pad-apk.html</link>
		<comments>http://www.brooklyn.jp/blog/android/optimus-pad-apk.html#comments</comments>
		<pubDate>Mon, 06 Jun 2011 09:58:03 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=865</guid>
		<description><![CDATA[動作確認したアプリがあったけど、ストア公開する前のベータ版なので、USB経由でインスコをトライ。
Windows では LG のウェブに正式な USB ドライバがあるのですが、Mac は無いみたいなので、自力でどうにかすることに。。
今日日、StarCraft 2 にも Mac 版があるのに、Windows 用のドライバしかないのはけしからんと思う。
（要：Mac OS 10.5 以降、MicroB to A-Type USBコネクタ）
まず「Android File Transfer」をダウンロード。

次に Optimus Pad で Android Market を起動して「File Expert」をインストール。

その後、USB で Mac と Optimus Pad を接続して、先ほどインストールした Android File Transfer を起動する。
それから事前に「設定 -> アプリケーション -> USB デバッグ」のチェックを外しておかないとデバッグモードになるため「Andoird搭載端末が見つかりません」と表示されます。
ちゃんと接続できていると、タイトル部分が「L-06C」となり、色んなフォルダが表示されます。

適当なフォルダ（自分のときは Download に入れました）に用意した .apk ファイルをドラッグ&#038;ドロップでファイル共有します。
そしたら、Optimus Pad で File Expert を起動して、ドラッグ&#038;ドロップしたフォルダを見るとファイルがあると思いますので、選択してインストールすると完了です。
※ 事前に「設定 -> アプリケーション -> [...]]]></description>
			<content:encoded><![CDATA[<p>動作確認したアプリがあったけど、ストア公開する前のベータ版なので、USB経由でインスコをトライ。<br />
Windows では LG のウェブに正式な USB ドライバがあるのですが、Mac は無いみたいなので、自力でどうにかすることに。。<br />
今日日、StarCraft 2 にも Mac 版があるのに、Windows 用のドライバしかないのはけしからんと思う。<br />
（要：Mac OS 10.5 以降、MicroB to A-Type USBコネクタ）</p>
<p>まず「<a href="http://www.android.com/filetransfer/" target="_blank">Android File Transfer</a>」をダウンロード。</p>
<p><a href="http://www.brooklyn.jp/blog/wp-content/uploads/2011/06/optimus_install-01.png"><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/06/optimus_install-01-490x308.png" alt="optimus_install-01" title="optimus_install-01" width="490" height="308" class="alignnone size-medium wp-image-866" /></a></p>
<p>次に Optimus Pad で Android Market を起動して「<a href="https://market.android.com/details?id=xcxin.filexpert" target="_blank">File Expert</a>」をインストール。</p>
<p><a href="http://www.brooklyn.jp/blog/wp-content/uploads/2011/06/optimus_install-02.png"><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/06/optimus_install-02-490x334.png" alt="optimus_install-02" title="optimus_install-02" width="490" height="334" class="alignnone size-medium wp-image-867" /></a></p>
<p>その後、USB で Mac と Optimus Pad を接続して、先ほどインストールした Android File Transfer を起動する。<br />
それから事前に「設定 -> アプリケーション -> USB デバッグ」のチェックを外しておかないとデバッグモードになるため「Andoird搭載端末が見つかりません」と表示されます。<br />
ちゃんと接続できていると、タイトル部分が「L-06C」となり、色んなフォルダが表示されます。</p>
<p><a href="http://www.brooklyn.jp/blog/wp-content/uploads/2011/06/optimus_install-03.png"><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/06/optimus_install-03-490x385.png" alt="optimus_install-03" title="optimus_install-03" width="490" height="385" class="alignnone size-medium wp-image-868" /></a></p>
<p>適当なフォルダ（自分のときは Download に入れました）に用意した .apk ファイルをドラッグ&#038;ドロップでファイル共有します。<br />
そしたら、Optimus Pad で File Expert を起動して、ドラッグ&#038;ドロップしたフォルダを見るとファイルがあると思いますので、選択してインストールすると完了です。<br />
※ 事前に「設定 -> アプリケーション -> 提供元不明のアプリ」のチェックボックスにチェックをつけておかないと無理のようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/android/optimus-pad-apk.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fontable</title>
		<link>http://www.brooklyn.jp/blog/product/fontable.html</link>
		<comments>http://www.brooklyn.jp/blog/product/fontable.html#comments</comments>
		<pubDate>Tue, 31 May 2011 04:58:43 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[product]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=860</guid>
		<description><![CDATA[こーゆーのが置いてある事務所とかあったら、とってもかっこいいのではないか。
自宅には、、、ちょっと無理かな。。
&#8212;
Alessandro and Andrea, Fontable &#8211; outdoorz gallery
&#8212;



]]></description>
			<content:encoded><![CDATA[<p>こーゆーのが置いてある事務所とかあったら、とってもかっこいいのではないか。<br />
自宅には、、、ちょっと無理かな。。</p>
<p>&#8212;<br />
<a href="http://www.outdoorzgallery.com/aa_font" target="_blank">Alessandro and Andrea, Fontable &#8211; outdoorz gallery</a><br />
&#8212;</p>
<p><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/05/aa_font_AD-490x376.jpg" alt="aa_font_AD" title="aa_font_AD" width="490" height="376" class="alignnone size-medium wp-image-861" /></p>
<p><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/05/aa_font_AAA-490x351.jpg" alt="aa_font_AAA" title="aa_font_AAA" width="490" height="351" class="alignnone size-medium wp-image-862" /></p>
<p><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/05/aa_font_1.jpg" alt="aa_font_1" title="aa_font_1" width="489" height="312" class="alignnone size-full wp-image-863" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/product/fontable.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stats.js</title>
		<link>http://www.brooklyn.jp/blog/javascript/stats-js.html</link>
		<comments>http://www.brooklyn.jp/blog/javascript/stats-js.html#comments</comments>
		<pubDate>Mon, 30 May 2011 02:59:55 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=857</guid>
		<description><![CDATA[フレームレートを計る Stats.as を作られた Mr.doob 氏作成の JavaScript 用の「Stats.js」が GitHub に公開されてた。
仕事早いなー
&#8212;
mrdoob / stats.js &#8211; GitHub
&#8212;
]]></description>
			<content:encoded><![CDATA[<p>フレームレートを計る Stats.as を作られた Mr.doob 氏作成の JavaScript 用の「Stats.js」が GitHub に公開されてた。<br />
仕事早いなー</p>
<p>&#8212;<br />
<a href="https://github.com/mrdoob/stats.js" target="_blank">mrdoob / stats.js &#8211; GitHub</a><br />
&#8212;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/javascript/stats-js.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook OAuth flowでハマタ</title>
		<link>http://www.brooklyn.jp/blog/javascript/facebook-oauth-flow.html</link>
		<comments>http://www.brooklyn.jp/blog/javascript/facebook-oauth-flow.html#comments</comments>
		<pubDate>Wed, 25 May 2011 08:28:34 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=853</guid>
		<description><![CDATA[Facebook のアプリ登録でサイトURLを「www.brooklyn.jp/」で登録して、そのアプリIDを使った php で OAuth 認証を「brooklyn.jp/」でアクセスした状態ですると、許可してませんって言われます。
そう言えば、Flash開発してたときにも、crossdomain 指定で www 付きと無しでは別もののサイトとして認識されていて困ったの思い出した。
専有サーバーでドメイン割当のときもそうだったの思い出した。
それを思うと妥当なミスでした。

]]></description>
			<content:encoded><![CDATA[<p>Facebook のアプリ登録でサイトURLを「www.brooklyn.jp/」で登録して、そのアプリIDを使った php で OAuth 認証を「brooklyn.jp/」でアクセスした状態ですると、許可してませんって言われます。</p>
<p>そう言えば、Flash開発してたときにも、crossdomain 指定で www 付きと無しでは別もののサイトとして認識されていて困ったの思い出した。<br />
専有サーバーでドメイン割当のときもそうだったの思い出した。</p>
<p>それを思うと妥当なミスでした。</p>
<p><a href="http://www.brooklyn.jp/blog/wp-content/uploads/2011/05/iPad_capture.jpg"><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/05/iPad_capture-490x367.jpg" alt="iPad_capture" title="iPad_capture" width="490" height="367" class="alignnone size-medium wp-image-854" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/javascript/facebook-oauth-flow.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anatomy of Mashup</title>
		<link>http://www.brooklyn.jp/blog/javascript/anatomy-of-mashup.html</link>
		<comments>http://www.brooklyn.jp/blog/javascript/anatomy-of-mashup.html#comments</comments>
		<pubDate>Tue, 24 May 2011 03:54:26 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=851</guid>
		<description><![CDATA[HTML5 によるビジュアライザー、楽曲がダフトパンクなとこがさらにかっこいい。
自作の Flash アプリで mp3 から audio spectrum の JSON データを吐き出すのを作ったそうです。
4MB 分の JSON データを手で書くのは無理だそうで。。。
&#8212;
Anatomy of a Mashup: Definitive Daft Punk visualised
&#8212;
]]></description>
			<content:encoded><![CDATA[<p>HTML5 によるビジュアライザー、楽曲がダフトパンクなとこがさらにかっこいい。<br />
自作の Flash アプリで mp3 から audio spectrum の JSON データを吐き出すのを作ったそうです。<br />
4MB 分の JSON データを手で書くのは無理だそうで。。。</p>
<p>&#8212;<br />
<a href="http://daftpunk.themaninblue.com/" target="_blank">Anatomy of a Mashup: Definitive Daft Punk visualised</a><br />
&#8212;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/javascript/anatomy-of-mashup.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Text Editor on Mac</title>
		<link>http://www.brooklyn.jp/blog/application/text-editor-on-mac.html</link>
		<comments>http://www.brooklyn.jp/blog/application/text-editor-on-mac.html#comments</comments>
		<pubDate>Mon, 16 May 2011 05:55:39 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[application]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=845</guid>
		<description><![CDATA[さっき使い始めたテキストエディター Fraise。
フリーのエディターでは歴代 mi → Smultron → CotEditor → Fraise（今ここ） ときましたが、そろそろ落ち着くかと。
Smultron がとっても使いやすいかな、と思っていたけどまさかの開発中止で他のエディタを使う事にして、となりの席のコーダー君＆向かいの席の元バックエンドプログラマ君が CotEditor 良いですよ！ というので使い始めるものの、タブ機能が無いので断念。。
それで、Snow Lepard オンリーだけど Smultron の後継者的な Fraise を導入（アイコンの系統も一緒 w）。
割と使いやすいけど、シンタックスカラーが甘いのが難点。
CSS はそれほど気にならないけど、 ActionScript、JavaScript、Objective-C に関しては、文字列とキーワードくらいしかカラーリングされてないんじゃないかしら？ ってくらいテキストカラーが多い。
とりあえず、もうちょっと様子見で使い続けてみる。
無料であれば今のところ Fraise が有力候補です。
ただ、これを言ったら元も子もないけど有料の Coda が一番良いと思う。あれ最強ですね。
]]></description>
			<content:encoded><![CDATA[<p>さっき使い始めたテキストエディター <a href="http://www.macupdate.com/app/mac/33751/fraise">Fraise</a>。<br />
フリーのエディターでは歴代 mi → Smultron → CotEditor → Fraise（今ここ） ときましたが、そろそろ落ち着くかと。</p>
<p>Smultron がとっても使いやすいかな、と思っていたけどまさかの開発中止で他のエディタを使う事にして、となりの席のコーダー君＆向かいの席の元バックエンドプログラマ君が CotEditor 良いですよ！ というので使い始めるものの、タブ機能が無いので断念。。</p>
<p>それで、Snow Lepard オンリーだけど Smultron の後継者的な Fraise を導入（アイコンの系統も一緒 w）。<br />
割と使いやすいけど、シンタックスカラーが甘いのが難点。<br />
CSS はそれほど気にならないけど、 ActionScript、JavaScript、Objective-C に関しては、文字列とキーワードくらいしかカラーリングされてないんじゃないかしら？ ってくらいテキストカラーが多い。</p>
<p>とりあえず、もうちょっと様子見で使い続けてみる。<br />
無料であれば今のところ Fraise が有力候補です。<br />
ただ、これを言ったら元も子もないけど有料の Coda が一番良いと思う。あれ最強ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/application/text-editor-on-mac.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>atSceneDescend で到着シーンを取得</title>
		<link>http://www.brooklyn.jp/blog/actionscript/atscenedescend-%e3%81%a7%e5%88%b0%e7%9d%80%e3%82%b7%e3%83%bc%e3%83%b3%e3%82%92%e5%8f%96%e5%be%97.html</link>
		<comments>http://www.brooklyn.jp/blog/actionscript/atscenedescend-%e3%81%a7%e5%88%b0%e7%9d%80%e3%82%b7%e3%83%bc%e3%83%b3%e3%82%92%e5%8f%96%e5%be%97.html#comments</comments>
		<pubDate>Mon, 09 May 2011 12:36:39 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[progression]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=839</guid>
		<description><![CDATA[久々にウェブサイトのオーサリングで、Progression 4を使ったら、みごとはまる。
グローバルメニューなどで、シーン移動時にアクションがある場合、直リンでアクセスされたときにメニューが全然動かない状態になった。
そんなときの Progression 4 での到着シーンのID取得方法。
[ IndexScene.as ]

// 下記を追加する
/**
 * シーン移動時に目的地がシーンオブジェクトの子階層であり、かつ出発地ではない場合に、自身が移動を中継した瞬間に送出されます。
 * このイベント処理の実行中には、ExecutorObject を使用した非同期処理が行えます。
 */
override protected function atSceneDescend():void {
	if( manager.destinedSceneId.toString() == "/index/scene_a" ) {
		// scene_a の場合の処理
	} else if( manager.destinedSceneId.toString() == "/index/scene_b" ) {
		// scene_b の場合の処理
	} else if( manager.destinedSceneId.toString() == "/index/scene_c" ) {
		// scene_c の場合の処理
	}

	addCommand(
		// なにか処理する場合はここに記述
	);
}


っと、atSceneDescend() でいきなり子シーンにアクセルするときのイベントを取得できるので、
このときに、manager.destinedSceneIdでシーンのnameで設定しておいたString型がとれる。
それに応じて処理を変えていく。
SceneObjectクラスにそーゆーのがあるかと思ってずっと探してたら、Progressionクラスにありました。なるほど、管理してるクラスに任せるのは理にかなってる、さすがです。
&#8212;
[追記]
間違えました（と言うか、付け忘れてました。。）
manager.destinedSceneId は SceneId が戻り値なので、String型じゃありません。
toString() を加えるか、String型でキャストしないと等価演算子がまともに機能しませんのです。
]]></description>
			<content:encoded><![CDATA[<p>久々にウェブサイトのオーサリングで、Progression 4を使ったら、みごとはまる。</p>
<p>グローバルメニューなどで、シーン移動時にアクションがある場合、直リンでアクセスされたときにメニューが全然動かない状態になった。<br />
そんなときの Progression 4 での到着シーンのID取得方法。</p>
<p>[ IndexScene.as ]</p>
<blockquote><pre>
// 下記を追加する
/**
 * シーン移動時に目的地がシーンオブジェクトの子階層であり、かつ出発地ではない場合に、自身が移動を中継した瞬間に送出されます。
 * このイベント処理の実行中には、ExecutorObject を使用した非同期処理が行えます。
 */
override protected function atSceneDescend():void {
	if( manager.destinedSceneId.toString() == "/index/scene_a" ) {
		// scene_a の場合の処理
	} else if( manager.destinedSceneId.toString() == "/index/scene_b" ) {
		// scene_b の場合の処理
	} else if( manager.destinedSceneId.toString() == "/index/scene_c" ) {
		// scene_c の場合の処理
	}

	addCommand(
		// なにか処理する場合はここに記述
	);
}
</pre>
</blockquote>
<p>っと、atSceneDescend() でいきなり子シーンにアクセルするときのイベントを取得できるので、<br />
このときに、manager.destinedSceneIdでシーンのnameで設定しておいたString型がとれる。<br />
それに応じて処理を変えていく。</p>
<p>SceneObjectクラスにそーゆーのがあるかと思ってずっと探してたら、Progressionクラスにありました。なるほど、管理してるクラスに任せるのは理にかなってる、さすがです。</p>
<p>&#8212;<br />
[追記]<br />
間違えました（と言うか、付け忘れてました。。）<br />
manager.destinedSceneId は SceneId が戻り値なので、String型じゃありません。<br />
toString() を加えるか、String型でキャストしないと等価演算子がまともに機能しませんのです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/actionscript/atscenedescend-%e3%81%a7%e5%88%b0%e7%9d%80%e3%82%b7%e3%83%bc%e3%83%b3%e3%82%92%e5%8f%96%e5%be%97.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quadcopters ping-pong</title>
		<link>http://www.brooklyn.jp/blog/technology/quadcopters.html</link>
		<comments>http://www.brooklyn.jp/blog/technology/quadcopters.html#comments</comments>
		<pubDate>Mon, 09 May 2011 08:55:41 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=834</guid>
		<description><![CDATA[動体センサーとかで認識してるっぽい
失敗したときが人間っぽくて愛らしい w
>
]]></description>
			<content:encoded><![CDATA[<p>動体センサーとかで認識してるっぽい<br />
失敗したときが人間っぽくて愛らしい w</p>
<p><object style="height: 305px; width: 500px"><param name="movie" value="http://www.youtube.com/v/3CR5y8qZf0Y?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/3CR5y8qZf0Y?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="500" height="305"></object>></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/technology/quadcopters.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPad2 simulator by HTML5</title>
		<link>http://www.brooklyn.jp/blog/css/ipad2-simulator-by-html5.html</link>
		<comments>http://www.brooklyn.jp/blog/css/ipad2-simulator-by-html5.html#comments</comments>
		<pubDate>Mon, 02 May 2011 04:56:04 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=830</guid>
		<description><![CDATA[これはすごい。
MapsとSafari、Notes、Timezonesが動くことを確認。
とくに感動したのが、マルチタスクとAppの編集（←アイコン長押し）
頑張れば、iPodとかもつくれるかも。
いや、頑張ってください。

&#8212;
iPad2 simulator /w Css3, Jquery and HTML5 (alexw.me)
via dotHTML5
&#8212;
]]></description>
			<content:encoded><![CDATA[<p>これはすごい。</p>
<p>MapsとSafari、Notes、Timezonesが動くことを確認。<br />
とくに感動したのが、マルチタスクとAppの編集（←アイコン長押し）<br />
頑張れば、iPodとかもつくれるかも。</p>
<p>いや、頑張ってください。</p>
<p><a href="http://alexw.me/ipad2/" target="_blank"><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/05/simulator.png" alt="simulator" title="simulator" width="490" height="369" class="alignnone size-full wp-image-831" /></a></p>
<p>&#8212;<br />
<a href="http://alexw.me/ipad2" target="_blank">iPad2 simulator /w Css3, Jquery and HTML5 (alexw.me)</a><br />
via <a href="http://dothtml5.com/archives/20110408_ipad2_simulator.html" target="_blank">dotHTML5</a><br />
&#8212;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/css/ipad2-simulator-by-html5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIScrollView で視差をつける</title>
		<link>http://www.brooklyn.jp/blog/objective-c/uiscrollview%e3%81%a7%e8%a6%96%e5%b7%ae%e3%82%92%e3%81%a4%e3%81%91%e3%82%8b.html</link>
		<comments>http://www.brooklyn.jp/blog/objective-c/uiscrollview%e3%81%a7%e8%a6%96%e5%b7%ae%e3%82%92%e3%81%a4%e3%81%91%e3%82%8b.html#comments</comments>
		<pubDate>Thu, 28 Apr 2011 09:58:11 +0000</pubDate>
		<dc:creator>jam</dc:creator>
				<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.brooklyn.jp/blog/?p=819</guid>
		<description><![CDATA[ここ半年以上、ウェブから離れていたので、その間に溜め込んだTIPSのメモ。
Objective-Cは厳格だけど楽しいです。あとXcode4からデバックが相当楽になりました。
と、余談は置いといて、UIScrollView でスクロールしたときに、表示されているそれぞれに視差をつけて動かすとき、真ん中を基準にして単純に可動範囲の横幅を足すのが一番楽でした。

iPadだと、実際の横幅は1024pxになるところを、表示させているOBJECT_Aには、可動域を1280pxとして動かす。
こうすると、OBJECT_Aが背景と同期していないように動いて、まるで視差があるように見えます。
何個かオブジェクトを配置して、別々の値を設定しておくと、なかなか面白い動きをしてくれます。
多分、GUINNESS WORDL RECORDSのアプリとかに近い動きになるはず。
今回やった方法は、UIScrollViewをベースのUIViewに配置して、UIScrollViewDelegateからscrollViewDidScrollで吐き出される値をそれぞれのオブジェクトに渡すというもの。
[ BaseView.h ]（← UIViewControllerにaddSubview:されたUIViewと想定）

#import 

@interface BaseView : UIView  {
	// 基本となるUIScrollView
	UIScrollView	*scrollView;
	NSMutableArray	*pages;
}

- (void)initObject;
- (int)currentPage;

@end


[ BaseView.m ]

#import "BaseView.h"
#import "PageView.h"

#define NUM_OF_PAGES	5	// 5ページあると想定

@implementation BaseView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
		[self initObject];
    }
    [...]]]></description>
			<content:encoded><![CDATA[<p>ここ半年以上、ウェブから離れていたので、その間に溜め込んだTIPSのメモ。<br />
Objective-Cは厳格だけど楽しいです。あとXcode4からデバックが相当楽になりました。</p>
<p>と、余談は置いといて、UIScrollView でスクロールしたときに、表示されているそれぞれに視差をつけて動かすとき、真ん中を基準にして単純に可動範囲の横幅を足すのが一番楽でした。</p>
<p><img src="http://www.brooklyn.jp/blog/wp-content/uploads/2011/04/explanation-490x372.png" alt="explanation" title="explanation" width="490" height="372" class="alignnone size-medium wp-image-820" /></p>
<p>iPadだと、実際の横幅は1024pxになるところを、表示させているOBJECT_Aには、可動域を1280pxとして動かす。<br />
こうすると、OBJECT_Aが背景と同期していないように動いて、まるで視差があるように見えます。<br />
何個かオブジェクトを配置して、別々の値を設定しておくと、なかなか面白い動きをしてくれます。<br />
多分、<a href="http://www.guinnessworldrecords.com/ipad.aspx">GUINNESS WORDL RECORDS</a>のアプリとかに近い動きになるはず。</p>
<p>今回やった方法は、UIScrollViewをベースのUIViewに配置して、UIScrollViewDelegateからscrollViewDidScrollで吐き出される値をそれぞれのオブジェクトに渡すというもの。</p>
<p>[ BaseView.h ]（← UIViewControllerにaddSubview:されたUIViewと想定）</p>
<blockquote><pre>
#import <UIKit/UIKit.h>

@interface BaseView : UIView <UIScrollViewDelegate> {
	// 基本となるUIScrollView
	UIScrollView	*scrollView;
	NSMutableArray	*pages;
}

- (void)initObject;
- (int)currentPage;

@end
</pre>
</blockquote>
<p>[ BaseView.m ]</p>
<blockquote><pre>
#import "BaseView.h"
#import "PageView.h"

#define NUM_OF_PAGES	5	// 5ページあると想定

@implementation BaseView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
		[self initObject];
    }
    return self;
}

- (void)initObject {
	CGRect rect = CGRectMake( 0.0f, 0.0f, 1024.0f, 768.0f );

	scrollView = [[UIScrollView alloc] initWithFrame:rect];
	scrollView.pagingEnabled = YES;
	scrollView.delegate = self;
	scrollView.contentSize = CGSizeMake( NUM_OF_PAGES * rect.size.width, rect.size.height );
	[self addSubview:scrollView];

	pages = [[NSMutableArray alloc] initWithCapacity: NUM_OF_PAGES];
	for( int i = 0; i < NUM_OF_PAGES; i++ ) {
		PagaView *page = [[UIPageView alloc] initWithFrame:rect];

		if( page.superview == nil ) {
		CGRect viewFrame = page.frame;
		viewFrame.origin.x = viewFrame.size.width * i;
		viewFrame.origin.y = 0;

		page.frame = viewFrame;

		[pages addObject:page];
		[scrollView addSubview:page];
	}
}

- (int)currentPage {
	CGFloat pageWidth = scrollView.frame.size.width;
	int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

	return page;
}

- (void)scrollViewDidScroll:(UIScrollView *)sv {
	int page = [self currentPage];

	if( page < 0 ) return;
	if( page >= NUM_OF_PAGES ) return;

	PageView *view = [pages objectAtIndex:page];
	if( view.superview != nil )
		[view adjustObjectPosition:sv.contentOffset.x pageIndex:page];	// この値を元に視差をつける
}
</pre>
</blockquote>
<p>[ PageView.h ]</p>
<blockquote><pre>
#import <UIKit/UIKit.h>

@interface PageView : UIView {
	// 今回は、それぞれのオブジェクトに画像を当てはめる想定
	UIImageView		*aImage;
	UIImageView		*bImage;
	UIImageView		*cImage;
}

- (void)setupPageObject;
- (void)adjustObjectPosition:(float)xpos pageIndex:(int)index;
- (UIImageView *)makeImageView:(CGRect)rect withImageName:(NSString *)imageName

@end
</pre>
</blockquote>
<p>[ PageView.m ]</p>
<blockquote><pre>
#import "PageView.h"

// それぞれの差異の値を設定
#define DIFF_A	500.0f
#define DIFF_B	300.0f
#define DIFF_C	100.0f

@implementation UIPageView

- (void)setupPageObject {
	CGRect aRect = CGRectMake( 90.0f, 140.0f, 815.0f, 510.0f );
	CGRect bRect = CGRectMake( 80.0f, 100.0f, 450.0f, 190.0f );
	CGRect cRect = CGRectMake( 300.0f, 20.0f, 160.0f, 90.0f );

	aImage = [self makeImageView:aRect withImageName:@"aImage.png"];
	[self addSubview:aImage];
	bImage = [self makeImageView:bRect withImageName:@"bImage.png"];
	[self addSubview:bImage];
	cImage = [self makeImageView:cRect withImageName:@"cImage.png"];
	[self addSubview:cImage];
}

- (void)adjustObjectPosition:(float)xpos pageIndex:(int)index {
	float pos = xpos - ((page + 1) * 1024.0f);

	// 真ん中を基点としたそれぞれのX座標の差異
	float moveValue_a = -((pos / 1024.0f) * DIFF_A) - (DIFF_A - 90.0f);
	float moveValue_b = -((pos / 1024.0f) * DIFF_B) - (DIFF_B - 80.0f);
	float moveValue_c = -((pos / 1024.0f) * DIFF_C) - (DIFF_C - 300.0f);

	// 各画像にX座標を適応
	aImage.frame = CGRectMake( moveValue_a, 140.0f, 815.0f, 510.0f );
	bImage.frame = CGRectMake( moveValue_b, 100.0f, 450.0f, 190.0f );
	cImage.frame = CGRectMake( moveValue_c, 20.0f, 160.0f, 90.0f );
}

- (UIImageView *)makeImageView:(CGRect)rect withImageName:(NSString *)imageName {
	NSString *path = [[NSBundle mainBundle] pathForResource:imageName ofType:@""];
	UIImage *img = [[UIImage alloc] initWithContentsOfFile:path];

	UIImageView *imgView = [[UIImageView alloc] initWithFrame:rect];
	imgView.image = img;

	[img release];

	return imgView;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self setupPageObject];
    }
    return self;
}

- (void)dealloc {
	[aImage removeFromSuperview];
	[aImage release];
	aImage = nil;

	[bImage removeFromSuperview];
	[bImage release];
	bImage = nil;

	[cImage removeFromSuperview];
	[cImage release];
	cImage = nil;

	[super dealloc];
}

@end
</pre>
</blockquote>
<p>こーゆーのは、Flashで培ったごまかしの技術が生かされる気がします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brooklyn.jp/blog/objective-c/uiscrollview%e3%81%a7%e8%a6%96%e5%b7%ae%e3%82%92%e3%81%a4%e3%81%91%e3%82%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

