<?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>CrossBridge</title>
	<atom:link href="http://www.crossbridge.biz/feed" rel="self" type="application/rss+xml" />
	<link>http://www.crossbridge.biz</link>
	<description>iOS/Andoirdを中心としたアプリケーションの企画/開発</description>
	<lastBuildDate>Sun, 22 Apr 2012 02:06:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Titanium Mobileのサンプルアプリケーションをシミュレータと実機で動かす</title>
		<link>http://www.crossbridge.biz/exec-sample-app-titanium-mobile</link>
		<comments>http://www.crossbridge.biz/exec-sample-app-titanium-mobile#comments</comments>
		<pubDate>Sat, 21 Apr 2012 16:43:45 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[Titanium Mobile]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=811</guid>
		<description><![CDATA[<p>今回はAppcelerator社が提供している「Kitchen Sink」というサンプルアプリケーションをTitanium Studioにインポートして動かす方法を説明します。iOS、Androidのシミュレータ（Androidはエミュレータ）と、実機で動かしてみます。 iOSとAnrdoidの開発環境の構築が完了していることが前提です。 ※開発環境の構築はこちらで説明しています それでは続きへどうぞ ソースコードのインポート サンプルアプリケーションのソースコードをTitanium Studioにインポートします。Titanium Studioでは簡単に「Kitchen Sink」のソースコードをインポートすることができます。 「Samples」のViewを開きます。インストール直後であればウインドウの左下にあります。もし表示されていなければメニューからWindow-&#62;Show View-&#62;Samplesと選択して開きます。 「Samples」のViewに「Kitchen Sink」があるので右クリックして「Import sample as project&#8230;」を選択します。 選択するとウインドウが開くのでプロジェクト名やインポート先に問題が無ければ（通常は変更する必要はないです）Finishボタンを押します。Finishボタンを押すとネットワーク上のリポジトリからダウンロードが開始されるので完了するまで待ちます。 ※ネットワーク環境によっては時間がかかる場合があります。 完了するとProject Explorerで「Kitchen Sink」が追加されていることを確認しましょう。 iOSのシミュレータで起動する iOSのシミュレータで起動してみましょう。Project ExplorerでKitchen Sinkのプロジェクト名か何かのファイルの上で右クリックをします。コンテキストメニューが開くのでRun As-&#62;iPhone Simulatorを選択します。 するとシミュレータで実行する処理が始まります。状況はコンソールに出力されます。 問題が無ければiPhoneシミュレータが起動してアプリケーションが立ち上がります。 Androidのエミュレータで起動する 次にAndroidのエミュレータで起動してみましょう。iPhoneの場合と同様に、Project ExplorerでKitchen Sinkのプロジェクト名か何かのファイルの上で右クリックをします。コンテキストメニューが開くのでRun As-&#62;Android Emulatorを選択します。 実行する準備が無事に完了すればAndroidのエミュレータが立ち上がります。iPhoneのシミュレータと異なり起動に時間がかかるので辛抱強く待ちましょう。ここで起動するエミュレータのAndroid SDKのバージョンはTitanium Studioの環境設定で指定しているDefault Android SDKのバージョンになります。 ※4.x系のエミュレータは重たいので2.x系のエミュレータをお勧めします。 起動するミュレータのAndroid SDKのバージョンを変更したい場合はコンテキストメニューでRun As-&#62;Run Configurations&#8230;を選択します。 ウインドウが開くのでTitanium Andoroid Emulatorの項目を選択してAPIを選択します。 iPhoneの実機にインストールする iPhoneの実機で動作させるにはAppleのiOS Developer Programに加入してプロビジョニング等の設定を完了させておく必要があります。今回はこの辺りは省略しています。 iPhoneをMacに接続してから、右クリックでコンテキストメニューを開きInstall <a href="http://www.crossbridge.biz/exec-sample-app-titanium-mobile">more</a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>今回はAppcelerator社が提供している「Kitchen Sink」というサンプルアプリケーションをTitanium Studioにインポートして動かす方法を説明します。iOS、Androidのシミュレータ（Androidはエミュレータ）と、実機で動かしてみます。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/c8d20736aa440e6a237bc0680ebad41c.png"><img class="size-medium wp-image-835 alignnone" title="iPhoneシミュレータ3" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/c8d20736aa440e6a237bc0680ebad41c-154x300.png" alt="" width="154" height="300" /></a><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/878c56c8fb59ade4a02efd530391507b.png"><img class="alignnone  wp-image-844" title="Androidエミュレータ2" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/878c56c8fb59ade4a02efd530391507b-184x300.png" alt="" width="166" height="270" /></a></p>
<p>iOSとAnrdoidの開発環境の構築が完了していることが前提です。<br />
※開発環境の構築は<a href="http://www.crossbridge.biz/start-mac-titanium-mobile" target="_blank">こちら</a>で説明しています</p>
<p>それでは続きへどうぞ</p>
<p><span id="more-811"></span></p>
<h2>ソースコードのインポート</h2>
<p>サンプルアプリケーションのソースコードをTitanium Studioにインポートします。Titanium Studioでは簡単に「Kitchen Sink」のソースコードをインポートすることができます。</p>
<p><span style="color: #ff0000;"><strong>「Samples」</strong></span>のViewを開きます。インストール直後であればウインドウの左下にあります。もし表示されていなければ<span style="color: #ff0000;"><strong>メニューからWindow-&gt;Show View-&gt;Samples</strong></span>と選択して開きます。</p>
<p>「Samples」のViewに「Kitchen Sink」があるので右クリックして「Import sample as project&#8230;」を選択します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/Import1.png"><img class="aligncenter  wp-image-822" title="Import1" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/Import1.png" alt="" width="385" height="175" /></a></p>
<p>選択するとウインドウが開くのでプロジェクト名やインポート先に問題が無ければ（通常は変更する必要はないです）Finishボタンを押します。Finishボタンを押すとネットワーク上のリポジトリからダウンロードが開始されるので完了するまで待ちます。<br />
※ネットワーク環境によっては時間がかかる場合があります。</p>
<p>完了するとProject Explorerで「Kitchen Sink」が追加されていることを確認しましょう。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/Import2.png"><img class="aligncenter  wp-image-826" title="Import2" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/Import2.png" alt="" width="190" height="290" /></a></p>
<h2>iOSのシミュレータで起動する</h2>
<p>iOSのシミュレータで起動してみましょう。Project ExplorerでKitchen Sinkのプロジェクト名か何かのファイルの上で右クリックをします。コンテキストメニューが開くので<span style="color: #ff0000;"><strong>Run As-&gt;iPhone Simulator</strong></span>を選択します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/5e5435720c8412efe7671c5ca3bd291a.png"><img class="aligncenter  wp-image-832" title="iPhoneシミュレータ1" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/5e5435720c8412efe7671c5ca3bd291a.png" alt="" width="388" height="385" /></a></p>
<p>するとシミュレータで実行する処理が始まります。状況はコンソールに出力されます。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/01764240b7610771d2e7c4b48ce204f4.png"><img class="aligncenter  wp-image-834" title="iPhoneシミュレータ2" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/01764240b7610771d2e7c4b48ce204f4.png" alt="" width="610" height="158" /></a></p>
<p style="text-align: left;">問題が無ければiPhoneシミュレータが起動してアプリケーションが立ち上がります。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/c8d20736aa440e6a237bc0680ebad41c.png"><img class="aligncenter  wp-image-835" title="iPhoneシミュレータ3" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/c8d20736aa440e6a237bc0680ebad41c.png" alt="" width="177" height="344" /></a></p>
<h2>Androidのエミュレータで起動する</h2>
<p>次にAndroidのエミュレータで起動してみましょう。iPhoneの場合と同様に、Project ExplorerでKitchen Sinkのプロジェクト名か何かのファイルの上で右クリックをします。コンテキストメニューが開くので<span style="color: #ff0000;"><strong>Run As-&gt;Android Emulator</strong></span>を選択します。</p>
<p>実行する準備が無事に完了すればAndroidのエミュレータが立ち上がります。iPhoneのシミュレータと異なり起動に時間がかかるので辛抱強く待ちましょう。ここで<span style="color: #ff0000;"><strong>起動するエミュレータのAndroid SDKのバージョンはTitanium Studioの環境設定で指定しているDefault Android SDKのバージョン</strong></span>になります。<br />
※4.x系のエミュレータは重たいので2.x系のエミュレータをお勧めします。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/878c56c8fb59ade4a02efd530391507b.png"><img class="aligncenter  wp-image-844" title="Androidエミュレータ2" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/878c56c8fb59ade4a02efd530391507b.png" alt="" width="237" height="385" /></a></p>
<p>起動するミュレータのAndroid SDKのバージョンを変更したい場合はコンテキストメニューで<span style="color: #ff0000;"><strong>Run As-&gt;Run Configurations&#8230;</strong></span>を選択します。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/24a9c3afb8f0a0a7793b6bf95ccd80dd.png"><img class="aligncenter size-medium wp-image-840" title="Androidエミュレータ1" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/24a9c3afb8f0a0a7793b6bf95ccd80dd-300x96.png" alt="" width="300" height="96" /></a></p>
<p>ウインドウが開くのでTitanium Andoroid Emulatorの項目を選択してAPIを選択します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/bc9ddd07fabbd01cb6a850e43cdbbc76.png"><img class="wp-image-853 aligncenter" title="Androidエミュレータ4" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/bc9ddd07fabbd01cb6a850e43cdbbc76.png" alt="" width="432" height="346" /></a></p>
<h2>iPhoneの実機にインストールする</h2>
<p>iPhoneの実機で動作させるにはAppleのiOS Developer Programに加入してプロビジョニング等の設定を完了させておく必要があります。今回はこの辺りは省略しています。</p>
<p>iPhoneをMacに接続してから、右クリックでコンテキストメニューを開き<span style="color: #ff0000;"><strong>Install to iOS Device</strong></span>を選択します。ウインドウが開くのでSDK、Certificates、Provisioningを選択します。問題が無ければFinishボタンを押します。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/554f5cf02fd5492df76026058dab675c.png"><img class="alignnone  wp-image-848" title="iPhone実機1" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/554f5cf02fd5492df76026058dab675c-300x297.png" alt="" width="210" height="208" /></a> <a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/22be8d0431a00ae4d18bcb1d8ac95578.png"><img class="alignnone  wp-image-849" title="iPhone実機2" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/22be8d0431a00ae4d18bcb1d8ac95578-300x297.png" alt="" width="210" height="208" /></a> <a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/7c8ba31f367a36277a9e903cf1b6f7d2.png"><img class="alignnone  wp-image-850" title="iPhone実機3" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/7c8ba31f367a36277a9e903cf1b6f7d2-300x297.png" alt="" width="210" height="208" /></a></p>
<p>iPhoneの実機にインストールする準備が始まり、完了すればiTunesが立ち上がり実機にインストールされます。</p>
<h2>Androidの実機にインストールする</h2>
<p>AndroidをMacに接続してから、右クリックでコンテキストメニューを開き<span style="color: #ff0000;"><strong>Install to Android Device</strong></span>を選択します。Androidの場合はiOSと異なりすぐにインストールされます。</p>
<p>以上、iPhoneとAndroidのシミュレータ/エミュレータと実機でサンプルアプリケーションを動かす方法でした。</p>
<p><iframe width="468" height="240" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=15&amp;l=st1&amp;mode=books-jp&amp;search=TITANIUM MOBILE&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" marginwidth="0" marginheight="0" border="0" frameborder="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/exec-sample-app-titanium-mobile/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MacにTitanium Mobileの開発環境を構築する</title>
		<link>http://www.crossbridge.biz/start-mac-titanium-mobile</link>
		<comments>http://www.crossbridge.biz/start-mac-titanium-mobile#comments</comments>
		<pubDate>Wed, 18 Apr 2012 14:49:16 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[Titanium Mobile]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=761</guid>
		<description><![CDATA[<p>Titanium MobileとはAppcelerator社が開発しているオープンソースのスマートフォンアプリ開発環境です。Javascriptを用いてiOS/Android両方のプラットフォームに向けてモバイルアプリケーションを開発できます。 Titanium MobileはJavascriptで記述しますが、ネイティブの機能にアクセスできることが特徴の1つです。 例えば以下ようなのことができます。 カメラの利用 GoogleMapの利用 ネットワークAPIの利用 端末内の動画や静止画へのアクセス 今回はMac上にTitanium Mobileの開発環境を構築する方法を説明します。 手順としては Xcode（iOS SDK）のインストール AndroidSDKのインストール Titanium Studioのインストール となります。もちろんiOSまたはAndroidのどちらか向けにしか開発しないよ！という方は1または2の片方だけでOKです。すでに各プラットフォームのSDKをインストールしている場合は3からお読みください。 それでは続きで説明して行きます。 1.Xcodeのインストール XcodeはAppStoreからインストールします。 ※2012/4/18現在のバージョンは4.3.2です インストールが完了したら念のため「/Applications」を開いてXcodeがあることを確認しておきましょう。 2.Android SDKのインストール まずhttp://developer.android.com/intl/ja/sdk/index.htmlからSDKをダウンロードします。2012/4/19現在ではバージョンr18なのでandroid-sdk_r18-macosx.zipをダウンロードします。   ダウンロードが完了したらZIPファイルを解凍して適当な場所（ユーザフォルダ以下やアプリケーションフォルダなど）に配置します。 このZIPファイルだけではSDKのインストールは完了していません。さらに、ダウンロードしてくる必要があります。 解凍したファイル群を配置したら、toolsフォルダの中の「android」をコマンドラインから実行します。Android SDK Managerが立ち上がるのでチェックを付けてインストールを開始します。 Toolsには全てのチェックを入れて、SDKは必要なバージョンにチェックを入れます。Titanium SDKのバージョンによって利用可能なAndroid SDKのバージョンは異なります。 3.Titanium Studioのインストール まずappcelerator社のホームページでDeveloperのアカウント登録（無料）をします。 https://my.appcelerator.com/auth/signup メールアドレス、パスワード、名前、名字、住んでいる国、県を入力してSingUpボタンを押すと、appcelerator社から確認のメールが届きます。そのメールに書かれているURLを開けば登録完了です。 登録が完了したらhttps://my.appcelerator.com/resourcesからTitanium Studioをダウンロードします。 Titanium Downloadsの「OS X」をクリックするとTitanium_Studio.dmgがダウンロードされます。このイメージファイルをマウントして、中身をアプリケーションフォルダにコピーしたらインストール完了です。 Titanium Studioの設定 インストールが完了したら起動してみましょう。 TitaniumStudioを起動します。起動するとワークスペース（作成したソースコードを保存する場所）の場所を指定するようダイアログが出るので任意の場所を指定します。 その後、SingUpを求められるので先ほどデベロッパー登録したメールアドレスとパスワードを入力します。 Titanium Studioが立ち上がったらメニューの環境設定-&#62;Aptana Studio-&#62;Titaniumを開きます。ここでインストールしたAndroid SDKのフォルダを「Android SDK <a href="http://www.crossbridge.biz/start-mac-titanium-mobile">more</a></p>
 ]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong>Titanium MobileとはAppcelerator社が開発しているオープンソースのスマートフォンアプリ開発環境</strong></span>です。Javascriptを用いてiOS/Android両方のプラットフォームに向けてモバイルアプリケーションを開発できます。</p>
<p>Titanium MobileはJavascriptで記述しますが、<span style="color: #ff0000;"><strong>ネイティブの機能にアクセスできる</strong></span>ことが特徴の1つです。<br />
例えば以下ようなのことができます。</p>
<ul>
<li>カメラの利用</li>
<li>GoogleMapの利用</li>
<li>ネットワークAPIの利用</li>
<li>端末内の動画や静止画へのアクセス</li>
</ul>
<p>今回はMac上にTitanium Mobileの開発環境を構築する方法を説明します。</p>
<p>手順としては</p>
<ol>
<li>Xcode（iOS SDK）のインストール</li>
<li>AndroidSDKのインストール</li>
<li>Titanium Studioのインストール</li>
</ol>
<p>となります。もちろんiOSまたはAndroidのどちらか向けにしか開発しないよ！という方は1または2の片方だけでOKです。すでに各プラットフォームのSDKをインストールしている場合は3からお読みください。</p>
<p>それでは続きで説明して行きます。</p>
<p><span id="more-761"></span></p>
<h2>1.Xcodeのインストール</h2>
<p><span style="color: #ff0000;"><strong>XcodeはAppStoreからインストール</strong></span>します。<br />
※2012/4/18現在のバージョンは4.3.2です</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/AppStore_Xcode.png"><img class="aligncenter  wp-image-768" title="AppStore_Xcode" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/AppStore_Xcode.png" alt="" width="420" height="321" /></a></p>
<p>インストールが完了したら念のため「/Applications」を開いてXcodeがあることを確認しておきましょう。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/FinderXcode.png"><img class="aligncenter  wp-image-772" title="FinderXcode" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/FinderXcode.png" alt="" width="271" height="198" /></a></p>
<h2>2.Android SDKのインストール</h2>
<p>まず<a href="http://developer.android.com/intl/ja/sdk/index.html" target="_blank">http://developer.android.com/intl/ja/sdk/index.html</a>からSDKをダウンロードします。2012/4/19現在ではバージョンr18なのでandroid-sdk_r18-macosx.zipをダウンロードします。</p>
<p style="text-align: center;"> <a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/1ede5a67681d7aadb0837a1891f7fd97.png"><img class="aligncenter  wp-image-776" title="AndroidSDKデベロッパーサイト" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/1ede5a67681d7aadb0837a1891f7fd97.png" alt="" width="575" height="326" /></a></p>
<p>ダウンロードが完了したらZIPファイルを解凍して適当な場所（ユーザフォルダ以下やアプリケーションフォルダなど）に配置します。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/7905f82630fad22db9fac8f75dd34a6f.png"><img class="aligncenter size-full wp-image-779" title="AndroidSDK解凍後" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/7905f82630fad22db9fac8f75dd34a6f.png" alt="" width="302" height="137" /></a></p>
<p><span style="color: #ff0000;"><strong>このZIPファイルだけではSDKのインストールは完了していません</strong></span>。さらに、ダウンロードしてくる必要があります。</p>
<p>解凍したファイル群を配置したら、toolsフォルダの中の「android」をコマンドラインから実行します。<span style="color: #ff0000;"><strong>Android SDK Manager</strong></span>が立ち上がるのでチェックを付けてインストールを開始します。</p>
<p>Toolsには全てのチェックを入れて、SDKは必要なバージョンにチェックを入れます。Titanium SDKのバージョンによって利用可能なAndroid SDKのバージョンは異なります。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/AndroidSDKManager.png"><img class="aligncenter  wp-image-782" title="AndroidSDKManager" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/AndroidSDKManager.png" alt="" width="490" height="350" /></a></p>
<h2>3.Titanium Studioのインストール</h2>
<p>まずappcelerator社のホームページでDeveloperのアカウント登録（無料）をします。</p>
<p><a href="https://my.appcelerator.com/auth/signup" target="_blank">https://my.appcelerator.com/auth/signup</a></p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/singup.png"><img class="aligncenter  wp-image-786" title="singup" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/singup.png" alt="" width="480" height="366" /></a></p>
<p>メールアドレス、パスワード、名前、名字、住んでいる国、県を入力してSingUpボタンを押すと、appcelerator社から確認のメールが届きます。そのメールに書かれているURLを開けば登録完了です。</p>
<p>登録が完了したら<a href="https://my.appcelerator.com/resources" target="_blank">https://my.appcelerator.com/resources</a>からTitanium Studioをダウンロードします。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/3ba2061432631f246fe1eb1c7484f7b7.png"><img class="aligncenter size-full wp-image-788" title="Titaniumダウンロード" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/3ba2061432631f246fe1eb1c7484f7b7.png" alt="" width="496" height="176" /></a></p>
<p>Titanium Downloadsの「OS X」をクリックすると<span style="color: #ff0000;"><strong>Titanium_Studio.dmg</strong></span>がダウンロードされます。このイメージファイルをマウントして、中身をアプリケーションフォルダにコピーしたらインストール完了です。</p>
<h2>Titanium Studioの設定</h2>
<p>インストールが完了したら起動してみましょう。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/TitaniumFinder.png"><img class="aligncenter  wp-image-795" title="TitaniumFinder" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/TitaniumFinder.png" alt="" width="218" height="202" /></a></p>
<p style="text-align: left;">TitaniumStudioを起動します。起動するとワークスペース（作成したソースコードを保存する場所）の場所を指定するようダイアログが出るので任意の場所を指定します。</p>
<p style="text-align: left;">その後、SingUpを求められるので先ほどデベロッパー登録したメールアドレスとパスワードを入力します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/TitaniumSS.png"><img class="aligncenter  wp-image-799" title="TitaniumSS" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/TitaniumSS.png" alt="" width="560" height="382" /></a></p>
<p style="text-align: left;">Titanium Studioが立ち上がったら<span style="color: #ff0000;"><strong>メニューの環境設定-&gt;Aptana Studio-&gt;Titanium</strong></span>を開きます。ここでインストールしたAndroid SDKのフォルダを「Android SDK Home」に設定します。「Default Android SDK」は2.2以上(Titanium Mobile SDKのバージョンによって対応しているSDKのバージョンが異なります)を設定します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/9b15b4da31ca34e07fb77eee10d29643.png"><img class="aligncenter  wp-image-857" title="Titanium_環境設定" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/9b15b4da31ca34e07fb77eee10d29643.png" alt="" width="762" height="177" /></a></p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: left;">以上でTitanium Mobileの開発環境の構築が終わりました。</p>
<p style="text-align: left;">次は<a href="http://www.crossbridge.biz/exec-sample-app-titanium-mobile">「Titanium Mobileのサンプルアプリケーションをシミュレータと実機で動かす」</a>へどうぞ。</p>
<p><iframe width="468" height="240" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=15&amp;l=st1&amp;mode=books-jp&amp;search=TITANIUM MOBILE&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" marginwidth="0" marginheight="0" border="0" frameborder="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/start-mac-titanium-mobile/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS端末の画面の回転を検出する</title>
		<link>http://www.crossbridge.biz/ios-interfaceorientation</link>
		<comments>http://www.crossbridge.biz/ios-interfaceorientation#comments</comments>
		<pubDate>Sat, 14 Apr 2012 13:47:02 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[shouldAutorotateToInterfaceOrientation]]></category>
		<category><![CDATA[willAnimateRotationToInterfaceOrientation:duration:]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=738</guid>
		<description><![CDATA[<p>今回はiPhone/iPadの画面の回転を有効にして、そのタイミングを検出する方法を説明します。 以下の3つのポイントで説明します。 アプリケーションで回転を有効にする方法 回転のタイミングで何か処理をする方法 現在の画面の向きを確認する方法 それでは続きへどうぞ。 アプリケーションで回転を有効にする方法 アプリケーションで回転をサポートするにはUIViewControllerのshouldAutorotateToInterfaceOrientationメソッドをオーバーライドします。 引数で画面の向きが渡ってくるのでその方向への回転を許可する場合にYESを返すように実装します。 画面の向きを表す定数 UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight 全ての方向への回転を許可する場合は以下のように単にYESを返せばOKです。 縦方向（ポートレート）のみ許可したい場合は以下のようにします。 回転のタイミングで何か処理をする方法 横方向と縦方向でレイアウトを変える場合など、回転するタイミングをハンドリングしたい場合は、UIViewControllerのwillAnimateRotationToInterfaceOrientation:duration:メソッドをオーバーライドします。willAnimateRotationToInterfaceOrientation:duration:メソッドは名前の通り回転する時に呼び出されます。 サンプルコードでは回転方向をNSLogで出力するようにしています。 ■ViewController.m 現在の画面の向きを確認する方法 最後に、現在の画面の向きを確認する方法です。 UIViewControllerのinterfaceOrientationプロパティで取得できます。 サンプルコードではボタンを押した時に現在の画面の向きをNSLogで出力するようにしています。 ■ViewController.m サンプルコード 今回使ったサンプルコードはGithubで公開しています。ダウンロードはこちらからどうぞ。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>今回はiPhone/iPadの画面の回転を有効にして、そのタイミングを検出する方法を説明します。</p>
<p>以下の3つのポイントで説明します。</p>
<ul>
<li>アプリケーションで回転を有効にする方法</li>
<li>回転のタイミングで何か処理をする方法</li>
<li>現在の画面の向きを確認する方法</li>
</ul>
<p>それでは続きへどうぞ。</p>
<p><span id="more-738"></span></p>
<h2>アプリケーションで回転を有効にする方法</h2>
<p>アプリケーションで回転をサポートするには<span style="color: #ff0000;"><strong>UIViewControllerのshouldAutorotateToInterfaceOrientationメソッド</strong></span>をオーバーライドします。</p>
<p>引数で画面の向きが渡ってくるのでその方向への回転を許可する場合にYESを返すように実装します。</p>
<p><span style="text-decoration: underline;">画面の向きを表す定数</span></p>
<ul>
<li>UIInterfaceOrientationPortrait</li>
<li>UIInterfaceOrientationPortraitUpsideDown</li>
<li>UIInterfaceOrientationLandscapeLeft</li>
<li>UIInterfaceOrientationLandscapeRight</li>
</ul>
<p>全ての方向への回転を許可する場合は以下のように単にYESを返せばOKです。</p><pre class="crayon-plain-tag">- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  // 全ての向きの回転を許可する
  return YES;
}</pre><p>縦方向（ポートレート）のみ許可したい場合は以下のようにします。</p><pre class="crayon-plain-tag">- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  // 縦方向のみ回転を許可する
  if ((interfaceOrientation == UIInterfaceOrientationPortrait) ||
      (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) {
    return YES;
  } else {
    return NO;
  }
}</pre><p></p>
<h2>回転のタイミングで何か処理をする方法</h2>
<p>横方向と縦方向でレイアウトを変える場合など、回転するタイミングをハンドリングしたい場合は、<span style="color: #ff0000;"><strong>UIViewControllerのwillAnimateRotationToInterfaceOrientation:duration:メソッド</strong></span>をオーバーライドします。willAnimateRotationToInterfaceOrientation:duration:メソッドは名前の通り回転する時に呼び出されます。</p>
<p>サンプルコードでは回転方向をNSLogで出力するようにしています。</p>
<p><span style="text-decoration: underline;">■ViewController.m</span></p><pre class="crayon-plain-tag">// 画面が回転しようとする時に呼ばれる
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
                                        duration:(NSTimeInterval)duration {

  [self printOrientation:interfaceOrientation];
}

- (void)printOrientation:(UIInterfaceOrientation)orientation {
  if (orientation == UIInterfaceOrientationPortrait) {
    NSLog(@&quot;%s ポートレート（縦）：ホームボタン下&quot;, __PRETTY_FUNCTION__);
	}	else if(orientation == UIInterfaceOrientationPortraitUpsideDown) {
    NSLog(@&quot;%s ポートレート（縦）：ホームボタン上&quot;, __PRETTY_FUNCTION__);
	}	else if(orientation == UIInterfaceOrientationLandscapeLeft) {
    NSLog(@&quot;%s ランドスケープ（横）：ホームボタン左&quot;, __PRETTY_FUNCTION__);
	}	else if(orientation == UIInterfaceOrientationLandscapeRight) {
    NSLog(@&quot;%s ランドスケープ（横）：ホームボタン右&quot;, __PRETTY_FUNCTION__);
	}
}</pre><p></p>
<h2>現在の画面の向きを確認する方法</h2>
<p>最後に、現在の画面の向きを確認する方法です。</p>
<p>UIViewControllerのinterfaceOrientationプロパティで取得できます。</p>
<p>サンプルコードではボタンを押した時に現在の画面の向きをNSLogで出力するようにしています。</p>
<p><span style="text-decoration: underline;">■ViewController.m</span></p><pre class="crayon-plain-tag">- (IBAction)handleButton:(id)sender {
  UIInterfaceOrientation orientation = self.interfaceOrientation;
  [self printOrientation:orientation];
}</pre><p></p>
<h2>サンプルコード</h2>
<p>今回使ったサンプルコードはGithubで公開しています。ダウンロードは<a href="https://github.com/CrossBridge/OrientationSample" target="_blank">こちら</a>からどうぞ。</p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/ios-interfaceorientation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressの固定ページで特定のカテゴリの新着一覧を表示する</title>
		<link>http://www.crossbridge.biz/show-list-at-fixed-page</link>
		<comments>http://www.crossbridge.biz/show-list-at-fixed-page#comments</comments>
		<pubDate>Thu, 12 Apr 2012 15:27:25 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[have_posts()]]></category>
		<category><![CDATA[query_posts()]]></category>
		<category><![CDATA[the_permalink()]]></category>
		<category><![CDATA[the_post()]]></category>
		<category><![CDATA[WP exec PHP]]></category>
		<category><![CDATA[wp_reset_query()]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=693</guid>
		<description><![CDATA[<p>WordPressはブログサイトとして使うだけでなく、固定ページを使って企業サイトなどのような通常のホームページを作成することもできます。 この場合はトップページや、会社概要を固定ページで作成し、ニュースなどを投稿（記事）を使って更新することが多いでしょう。そして、トップページに新着情報の一覧を表示したいケースがよくあると思います。 今回は固定ページに、特定のカテゴリの新着一覧を表示する方法を説明します。 それでは続きへどうぞ。 ポイント 今回のポイントは2つです。 固定ページでPHPの実行をできるようにする 固定ページ内でPHPを実行して新着一覧を取得する page.phpに記述する場合は「固定ページでPHPの実行をできるようにする」必要がなくなりますが、複数の固定ページを使っている場合はpage.php内で条件分岐を行う必要がでてきます。 一長一短ですが今回は特定の固定ページ内にPHPを記述する方法をとります。 固定ページでPHPの実行をできるようにする プラグインを導入することで固定ページ（と投稿）でPHPのコードを記述して実行することができるようになります。 今回は「WP exec PHP」を取り上げますが、他にも同様のプラグインとして「PHP Execution」「Exec-PHP」などあります。「WP exec PHP」を選んだ理由は「PHP Execution」「Exec-PHP」はソースコードを表示するためのプラグインである「Syntax Highlighter」との相性が悪いからです。 それでは「WP exec PHP」をインストールします。他のプラグイン同様に管理画面からプラグインの検索-&#62;インストールが便利です。 「WP exec PHP」をインストールしたら有効にします。そうすると固定ページや投稿内でPHPを記述し、それらを[exec][/exec]で囲むと実行されるようになります。 新着一覧を取得して表示する プラグインを導入してPHPを実行できるようにしたら固定ページに記事の新着一覧を表示するPHPのコードを記述します。 サンプルのソースコードを記載します。 while文の条件にhave_posts()関数を使い、ループの中で以下の処理をしています。 7行目：the_time()関数で公開日時を表示 9行目：the_permalink()関数でaタグにパーマリンクを指定 11行目：the_title()関数でタイトルを表示 今回のポイントは1行目のquery_posts()関数です。query_posts()関数はWordPress ループで表示される投稿を変更する時に使います。 引数で表示する投稿の条件を指定します。上記のサンプルコードでは「新着10件まで」という条件と「カテゴリーIDが0」6という条件を指定しています。10件までという指定で、現在6件の記事があるので6番目の記事から順番に表示されています。 ここで query_posts($query_string . &#8216;showposts=5&#38;cat=0&#8242;); とソースコードを修正した場合は以下のような表示に変わります。5件までと指定しているので最新の6番目から2番までの記事が表示されます。 カテゴリを複数指定する場合は query_posts($query_string . &#8216;showposts=10&#38;cat=0,3,5&#8242;); のように カンマで区切って指定します。 最後に忘れてはいけないことは、query_posts()関数を呼び出した後は、wp_reset_query()関数で指定をクリアということです。 クリアしなければこれより後に記述しているWordPressループでも条件が指定されたままになり思わぬ結果になってしまうことがありので気をつけましょう。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>WordPressはブログサイトとして使うだけでなく、固定ページを使って企業サイトなどのような通常のホームページを作成することもできます。</p>
<p>この場合はトップページや、会社概要を固定ページで作成し、ニュースなどを投稿（記事）を使って更新することが多いでしょう。そして、トップページに新着情報の一覧を表示したいケースがよくあると思います。</p>
<p>今回は固定ページに、<span style="color: #ff0000;"><strong>特定のカテゴリの新着一覧を表示する</strong></span>方法を説明します。</p>
<p><img class="aligncenter" title="showposts5" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/showposts5.png" alt="" width="427" height="365" /></p>
<p>それでは続きへどうぞ。</p>
<p><span id="more-693"></span></p>
<h2>ポイント</h2>
<p>今回のポイントは2つです。</p>
<ul>
<li>固定ページでPHPの実行をできるようにする</li>
<li>固定ページ内でPHPを実行して新着一覧を取得する</li>
</ul>
<p>page.phpに記述する場合は「固定ページでPHPの実行をできるようにする」必要がなくなりますが、複数の固定ページを使っている場合はpage.php内で条件分岐を行う必要がでてきます。</p>
<p>一長一短ですが今回は特定の固定ページ内にPHPを記述する方法をとります。</p>
<h2>固定ページでPHPの実行をできるようにする</h2>
<p>プラグインを導入することで固定ページ（と投稿）でPHPのコードを記述して実行することができるようになります。</p>
<p>今回は<span style="color: #ff0000;"><strong>「WP exec PHP」</strong></span>を取り上げますが、他にも同様のプラグインとして「PHP Execution」「Exec-PHP」などあります。「WP exec PHP」を選んだ理由は「PHP Execution」「Exec-PHP」はソースコードを表示するためのプラグインである「Syntax Highlighter」との相性が悪いからです。</p>
<p>それでは「WP exec PHP」をインストールします。他のプラグイン同様に管理画面からプラグインの検索-&gt;インストールが便利です。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/4531755208fbac699531d8aa1217566f.png"><img class="aligncenter  wp-image-700" title="WP_exec_PHP_インストール" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/4531755208fbac699531d8aa1217566f.png" alt="" width="675" height="163" /></a></p>
<p style="text-align: left;">「WP exec PHP」をインストールしたら有効にします。そうすると固定ページや投稿内でPHPを記述し、それらを[exec][/exec]で囲むと実行されるようになります。</p>
<h2 style="text-align: left;">新着一覧を取得して表示する</h2>
<p style="text-align: left;">プラグインを導入してPHPを実行できるようにしたら固定ページに記事の新着一覧を表示するPHPのコードを記述します。</p>
<p style="text-align: left;">サンプルのソースコードを記載します。</p>
<p></p><pre class="crayon-plain-tag">query_posts($query_string . 'showposts=10&amp;cat=0');
if (have_posts()): 
    while (have_posts()) :
        the_post();
        echo('&lt;ul&gt;');
            echo('&lt;li&gt;');
            the_time('Y年m月d日');
            echo('&lt;a href=&quot;');
            the_permalink();
            echo('&quot;&gt;');
            the_title();
            echo('&lt;/a&gt;');
            echo('&lt;/li&gt;');
        echo('&lt;/ul&gt;');
    endwhile;
endif;
wp_reset_query();</pre><p></p>
<p style="text-align: left;">while文の条件にhave_posts()関数を使い、ループの中で以下の処理をしています。</p>
<p style="text-align: left;">7行目：the_time()関数で公開日時を表示</p>
<p style="text-align: left;">9行目：the_permalink()関数でaタグにパーマリンクを指定</p>
<p style="text-align: left;">11行目：the_title()関数でタイトルを表示</p>
<p style="text-align: left;">今回のポイントは1行目の<span style="color: #ff0000;"><strong>query_posts()関数</strong></span>です。<span style="color: #ff0000;"><strong>query_posts()関数</strong></span>はWordPress ループで表示される投稿を変更する時に使います。</p>
<p style="text-align: left;">引数で表示する投稿の条件を指定します。上記のサンプルコードでは「新着10件まで」という条件と「カテゴリーIDが0」6という条件を指定しています。10件までという指定で、現在6件の記事があるので6番目の記事から順番に表示されています。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/showposts10.png"><img class="aligncenter  wp-image-708" title="showposts10" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/showposts10.png" alt="" width="412" height="390" /></a></p>
<p style="text-align: left;">ここで</p>
<p style="text-align: left; padding-left: 30px;"><strong>query_posts($query_string . &#8216;showposts=5&amp;cat=0&#8242;);</strong></p>
<p style="text-align: left;">とソースコードを修正した場合は以下のような表示に変わります。5件までと指定しているので最新の6番目から2番までの記事が表示されます。</p>
<p style="text-align: center;"><img title="showposts5" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/showposts5.png" alt="" width="427" height="365" /></p>
<p style="text-align: left;">カテゴリを複数指定する場合は</p>
<p style="text-align: left; padding-left: 30px;"><strong>query_posts($query_string . &#8216;showposts=10&amp;cat=0,3,5&#8242;);</strong></p>
<p style="text-align: left;">のように カンマで区切って指定します。</p>
<p style="text-align: left;"><span style="color: #ff0000;"><span style="color: #000000;">最後に忘れてはいけないことは、</span><strong>query_posts()関数を呼び出した後は、wp_reset_query()関数で指定をクリア</strong><span style="color: #000000;">ということです</span></span>。</p>
<p style="text-align: left;">クリアしなければこれより後に記述しているWordPressループでも条件が指定されたままになり思わぬ結果になってしまうことがありので気をつけましょう。</p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=WordPress&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/show-list-at-fixed-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>アプリから画像を添付してメールを送信する方法</title>
		<link>http://www.crossbridge.biz/mfmailcomposeviewcontroller-with-image</link>
		<comments>http://www.crossbridge.biz/mfmailcomposeviewcontroller-with-image#comments</comments>
		<pubDate>Fri, 06 Apr 2012 14:53:28 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[MessageUI.framework]]></category>
		<category><![CDATA[MFMailComposeViewController]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=622</guid>
		<description><![CDATA[<p>iOS3以降ではMFMailComposeViewControllerクラスを使ってアプリから簡単にメールを送信することが出来ます。 今回はMFMailComposeViewControllerクラスを使って画像を添付してメールを送る方法を説明します。 メールを送信する大まかな流れは以下の通りです。 事前準備 プロジェクトにMessageUI.frameworkを追加する 使うクラスでMessageUI/MessageUI.hとMessageUI/MFMailComposeViewController.hをimportする 使うクラスでMFMailComposeViewControllerDelegateを実装する MFMailComposeViewControllerの利用手順 canSendMailメソッドでメールの送信が可能か確認する MFMailComposeViewControllerクラスのインスタンスを生成 delegate（CMFMailComposeViewControllerDelegate）を設定 必要に応じてメールの件名/宛先(TO,CC,BCC)/添付ファイル/本文を設定する モーダルでビューを表示する それでは続きで説明して行きます。 プロジェクトにフレームワークを追加する MessageUI.frameworkをプロジェクトに追加します。 ヘッダファイルをimportする MessageUI/MessageUI.hとMessageUI/MFMailComposeViewController.hをimportします。サンプルではViewControllerでボタンが押された時にメール作成画面を表示させるため、ViewController.hに記述します。 MFMailComposeViewControllerDelegateの実装も今回はこのクラスで行います。 MFMailComposeViewControllerを使う アプリからメールを送信する場合はMFMailComposeViewControllerクラスを使います。このクラスのインスタンスを生成して、宛先やタイトルを設定して、Viewを表示するだけで簡単にメールを送信することができます。 まずはメソッドの一覧を見てみましょう。 サンプルコードではボタンが押された場合にhandleMailButtonメソッドが呼ばれ、その中でMFMailComposeViewControllerクラスのインスランスの生成、設定、表示を行っています。 ■ViewController.m 9,11行目：インスタンスの生成とdelegateの設定。 15行目：タイトルの設定。 18,19行目：宛先（TO）の設定。 21〜27行目：宛先（CC,BCC）の設定。それぞれ複数のアドレスが設定可能なのでNSArray（要素はNSString）で指定する。最後はnilを忘れないように注意。 30,31行目：本文を設定。HTMLの場合はisHTMLをYESにする。今回はプレーンテキストなのでNOを指定している。 34〜37行目：addAttachmentData:mimeType:fileName:メソッドで添付ファイルを設定。NSDataで添付するデータを指定する。MIMETypeは適切な値を指定する必要がある。 以上がメールを送信するためのビュー（画面）を表示するための処理です。もちろん、宛先や本文はユーザーが後から追加、変更することができます。 今回は全ての設定をビューの表示前に行っていますが、例えばsetToRecipientsで設定しないようにすると、宛先（TO）が空欄のままメール作成の画面が表示されます。 MFMailComposeViewControllerDelegate MFMailComposeViewControllerのViewが表示され、ユーザーが送信またはキャンセルを選択すると、MFMailComposeViewControllerDelegateのmailComposeController:didFinishWithResult:error:メソッドが呼ばれます。 サンプルコードではresultコードを見てログの出力を行い、モーダルで表示していたMFMailComposeViewControllerのViewを閉じる処理を行っています。 サンプルコード 今回使用したサンプルコードはGithubで公開しています。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>iOS3以降では<span style="color: #ff0000;"><strong>MFMailComposeViewControllerクラス</strong></span>を使ってアプリから簡単にメールを送信することが出来ます。</p>
<p>今回はMFMailComposeViewControllerクラスを使って画像を添付してメールを送る方法を説明します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/64a3575fdc61c5078488679bd21f2bdd.png"><img class="aligncenter  wp-image-649" title="サンプル画面" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/64a3575fdc61c5078488679bd21f2bdd.png" alt="" width="221" height="430" /></a></p>
<p>メールを送信する大まかな流れは以下の通りです。</p>
<h3>事前準備</h3>
<ul>
<li>プロジェクトにMessageUI.frameworkを追加する</li>
<li>使うクラスでMessageUI/MessageUI.hとMessageUI/MFMailComposeViewController.hをimportする</li>
<li>使うクラスでMFMailComposeViewControllerDelegateを実装する</li>
</ul>
<h3>MFMailComposeViewControllerの利用手順</h3>
<ol>
<li>canSendMailメソッドでメールの送信が可能か確認する</li>
<li>MFMailComposeViewControllerクラスのインスタンスを生成</li>
<li>delegate（CMFMailComposeViewControllerDelegate）を設定</li>
<li>必要に応じてメールの件名/宛先(TO,CC,BCC)/添付ファイル/本文を設定する</li>
<li>モーダルでビューを表示する</li>
</ol>
<p>それでは続きで説明して行きます。</p>
<p><span id="more-622"></span></p>
<h2>プロジェクトにフレームワークを追加する</h2>
<p><span style="color: #ff0000;"><strong>MessageUI.framework</strong></span>をプロジェクトに追加します。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/9a2dbb40d57ae4f07d3f83cda7454c3e.png"><img class="aligncenter  wp-image-632" title="Framework追加" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/9a2dbb40d57ae4f07d3f83cda7454c3e.png" alt="" width="534" height="287" /></a></p>
<h3>ヘッダファイルをimportする</h3>
<p><span style="color: #ff0000;"><strong>MessageUI/MessageUI.h</strong></span>と<span style="color: #ff0000;"><strong>MessageUI/MFMailComposeViewController.h</strong></span>をimportします。サンプルではViewControllerでボタンが押された時にメール作成画面を表示させるため、ViewController.hに記述します。</p>
<p><span style="color: #ff0000;"><strong>MFMailComposeViewControllerDelegate</strong></span>の実装も今回はこのクラスで行います。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/04/ab6cd214e5a76daec3049516fc64261a.png"><img class="aligncenter size-full wp-image-641" title="ヘッダーファイルへの記述" src="http://www.crossbridge.biz/wp-content/uploads/2012/04/ab6cd214e5a76daec3049516fc64261a.png" alt="" width="589" height="98" /></a></p>
<h2>MFMailComposeViewControllerを使う</h2>
<p>アプリからメールを送信する場合はMFMailComposeViewControllerクラスを使います。このクラスのインスタンスを生成して、宛先やタイトルを設定して、Viewを表示するだけで簡単にメールを送信することができます。</p>
<p>まずはメソッドの一覧を見てみましょう。</p>
<h2 class="wp-table-reloaded-table-name-id-1 wp-table-reloaded-table-name">MFMailComposeViewControllerクラスのメソッド</h2>

<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">メソッド</th><th class="column-2">説明</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">+ (BOOL)canSendMail</td><td class="column-2">メールの送信が可能か返す。送信可能であればYES、不可能であればNOを返す。</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">- (void)setSubject:(NSString*)subject</td><td class="column-2">件名を設定する。</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">- (void)setToRecipients:(NSArray*)toRecipients</td><td class="column-2">TOを設定する。</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">- (void)setCcRecipients:(NSArray*)ccRecipients</td><td class="column-2">CCを設定する。</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">- (void)setBccRecipients:(NSArray*)bccRecipients</td><td class="column-2">BCCを設定する。</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">- (void)setMessageBody:(NSString*)body isHTML:(BOOL)isHTML</td><td class="column-2">本文を設定する。本文がHTMLの場合はisHTMLにYESを指定する。</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">- (void)addAttachmentData:(NSData*)attachment mimeType:(NSString*)mimeType fileName:(NSString*)filename</td><td class="column-2">添付ファイルを設定する。</td>
	</tr>
</tbody>
</table>

<p>サンプルコードではボタンが押された場合にhandleMailButtonメソッドが呼ばれ、その中でMFMailComposeViewControllerクラスのインスランスの生成、設定、表示を行っています。</p>
<p><strong><span style="text-decoration: underline;">■ViewController.m</span></strong></p><pre class="crayon-plain-tag">- (IBAction)handleMailButton:(id)sender {
  // メールを送信することができるか確認
  if ([MFMailComposeViewController canSendMail] == NO) {
    NSLog(@&quot;%s can't send mail&quot;, __PRETTY_FUNCTION__);
    return;
  }

  // MFMailComposeViewControllerのインスタンスを生成して初期化する
  MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];

  // デリゲートの通知先のオブジェクトを設定する
  mailViewController.mailComposeDelegate = self;

  // 件名を設定する
  [mailViewController setSubject:@&quot;Subject!&quot;];

  // 宛先（TO）を設定する
  NSArray *toRecipients = [NSArray arrayWithObject:@&quot;hoge@hoge.jp&quot;];
  [mailViewController setToRecipients:toRecipients];

  // 宛先（CC）を設定する。最後はnilを忘れずに
  NSArray *ccRecipients = [NSArray arrayWithObjects:@&quot;hoge1@hoge.com&quot;, @&quot;hoge2@hoge.jp&quot;, nil];
  [mailViewController setCcRecipients:ccRecipients];  

  // 宛先（BCC）を設定する。最後はnilを忘れずに
  NSArray *bccRecipients = [NSArray arrayWithObject:@&quot;hogege@foo.jp&quot;];
  [mailViewController setBccRecipients:bccRecipients]; 

  // 本文を設定する
  NSString *messageBody = @&quot;No Cat, No Life&quot;;
  [mailViewController setMessageBody:messageBody isHTML:NO];

  // 添付ファイルを設定する
  NSString *path = [[NSBundle mainBundle] pathForResource:@&quot;cat&quot; ofType:@&quot;png&quot;];
  UIImage *image= [[UIImage alloc] initWithContentsOfFile:path];
  NSData *data  = [[[NSData alloc] initWithData:UIImagePNGRepresentation(image)] autorelease];
  [mailViewController addAttachmentData:data mimeType:@&quot;image/png&quot; fileName:@&quot;cat.png&quot;];

  // モーダルで表示させる
  [self presentModalViewController:mailViewController animated:YES];

  [mailViewController release];
}</pre><p><strong>9,11行目</strong>：インスタンスの生成とdelegateの設定。<br />
<strong>15行目</strong>：タイトルの設定。<br />
<strong>18,19行目</strong>：宛先（TO）の設定。<br />
<strong>21〜27行目</strong>：宛先（CC,BCC）の設定。<span style="color: #ff0000;"><strong>それぞれ複数のアドレスが設定可能なのでNSArray（要素はNSString）で指定する。最後はnilを忘れないように注意。<br />
</strong></span><strong>30,31行目</strong>：本文を設定。HTMLの場合はisHTMLをYESにする。今回はプレーンテキストなのでNOを指定している。<br />
<strong>34〜37行目</strong>：<span style="color: #ff0000;"><strong>addAttachmentData:mimeType:fileName:メソッドで添付ファイルを設定</strong></span>。NSDataで添付するデータを指定する。MIMETypeは適切な値を指定する必要がある。</p>
<p>以上がメールを送信するためのビュー（画面）を表示するための処理です。もちろん、宛先や本文はユーザーが後から追加、変更することができます。</p>
<p>今回は全ての設定をビューの表示前に行っていますが、例えばsetToRecipientsで設定しないようにすると、宛先（TO）が空欄のままメール作成の画面が表示されます。</p>
<h2>MFMailComposeViewControllerDelegate</h2>
<p>MFMailComposeViewControllerのViewが表示され、ユーザーが送信またはキャンセルを選択すると、MFMailComposeViewControllerDelegateの<span style="color: #ff0000;"><strong>mailComposeController:didFinishWithResult:error:メソッド</strong></span>が呼ばれます。</p>
<p>サンプルコードではresultコードを見てログの出力を行い、モーダルで表示していたMFMailComposeViewControllerのViewを閉じる処理を行っています。</p><pre class="crayon-plain-tag">- (void)mailComposeController:(MFMailComposeViewController*)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error {    

  // resultに結果が入ってくる
  switch (result) {
    case MFMailComposeResultCancelled:
      NSLog(@&quot;%s Cancelled&quot;, __PRETTY_FUNCTION__);
      break;
    case MFMailComposeResultSaved:
      NSLog(@&quot;%s Saved&quot;, __PRETTY_FUNCTION__);
      break;
    case MFMailComposeResultSent:
      NSLog(@&quot;%s Sent&quot;, __PRETTY_FUNCTION__);
      break;
    case MFMailComposeResultFailed:
      NSLog(@&quot;%s Failed&quot;, __PRETTY_FUNCTION__);
      break;
    default:
      break;
  }

  // モーダルビューを閉じる
  [self dismissModalViewControllerAnimated:YES];
}</pre><p></p>
<h2>サンプルコード</h2>
<p>今回使用したサンプルコードは<a href="https://github.com/CrossBridge/MFMailComposeViewControllerSample" target="_blank">Github</a>で公開しています。</p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/mfmailcomposeviewcontroller-with-image/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>リリース時にNSLogとNSAssertを無効にする</title>
		<link>http://www.crossbridge.biz/disable-nslog-nsassert</link>
		<comments>http://www.crossbridge.biz/disable-nslog-nsassert#comments</comments>
		<pubDate>Sun, 01 Apr 2012 14:00:47 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[NSAssert]]></category>
		<category><![CDATA[NSLog]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=597</guid>
		<description><![CDATA[<p>メソッドが呼ばれた時にメソッド名を表示さたり、必要な箇所で変数の中身を表示したりするなど、デバッグに便利なNSLogとNSAssertです。 この便利なNSLog／NSAssertですが、リリース時には処理速度、モジュールサイズを小さくしたいなどの理由で無効にしておきたいものです。 今回はリリースビルド時にNSLogとNSAssertを無効にする方法を説明します。 それでは続きへどうぞ。 NSAssert 指定した条件が間違っていれば、コンソールにメッセージを出力します。あり得ない値が入ったときにメッセージを出力したいときに使います。 例えば100以下の値しか入ってこないはずのvalueに100より大きい値が入っているときの分かるようにしたい、など。 ex) NSAssert(value &#60;=100, @&#8221;over 100&#8243;); NSLog コンソールにメッセージを出力します。いわゆるprintfデバッグです。 ex) NSLog(@&#8221;hogehoge&#8221;); NSAssertを無効にする Appleのドキュメントには Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined. と記述されているのでreleaseでビルドしたときにNS_BLOCK_ASSERTIONSが定義されているようにすればOKです。 Xcode4ではプロジェクトを作成したときの初期設定で既に定義されている状態になっています。Xcode3以前で作られたプロジェクトファイルでは定義されていないので、自分で追記する必要があります。 この設定でリリースビルド時にNS_BLOCK_ASSERTIONSが定義がされ、NSAssertが無効になります。 NSLogを無効にする リリースビルドの時にNSLogマクロを空で定義するという方法で無効化します。 今回はリリース時の判断方法として上で説明した NS_BLOCK_ASSERTIONS を使います。もちろん別の判断用のマクロを用意しても問題ありません。 この記述を全てのファイルに適応させる簡単な方法はプロジェクト名_Prefix.pchに記述することです。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>メソッドが呼ばれた時にメソッド名を表示さたり、必要な箇所で変数の中身を表示したりするなど、デバッグに便利な<span style="color: #ff0000;"><strong>NSLog</strong></span>と<span style="color: #ff0000;"><strong>NSAssert</strong></span>です。</p>
<p>この便利なNSLog／NSAssertですが、リリース時には処理速度、モジュールサイズを小さくしたいなどの理由で無効にしておきたいものです。</p>
<p>今回はリリースビルド時にNSLogとNSAssertを無効にする方法を説明します。</p>
<p>それでは続きへどうぞ。</p>
<p><span id="more-597"></span></p>
<h2>NSAssert</h2>
<p>指定した条件が間違っていれば、コンソールにメッセージを出力します。あり得ない値が入ったときにメッセージを出力したいときに使います。</p>
<p>例えば100以下の値しか入ってこないはずのvalueに100より大きい値が入っているときの分かるようにしたい、など。</p>
<p style="padding-left: 30px;">ex) NSAssert(value &lt;=100, @&#8221;over 100&#8243;);</p>
<h2>NSLog</h2>
<p>コンソールにメッセージを出力します。いわゆるprintfデバッグです。</p>
<p style="padding-left: 30px;">ex) NSLog(@&#8221;hogehoge&#8221;);</p>
<h2>NSAssertを無効にする</h2>
<p>Appleのドキュメントには</p>
<p style="padding-left: 30px;"><strong>Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined.</strong></p>
<p>と記述されているので<span style="color: #ff0000;"><strong>releaseでビルドしたときにNS_BLOCK_ASSERTIONSが定義</strong><strong>されている</strong></span>ようにすればOKです。</p>
<p>Xcode4ではプロジェクトを作成したときの初期設定で既に定義されている状態になっています。Xcode3以前で作られたプロジェクトファイルでは定義されていないので、自分で追記する必要があります。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/NS_BLOCK_ASSERTIONS.png"><img class="aligncenter  wp-image-605" title="NS_BLOCK_ASSERTIONS" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/NS_BLOCK_ASSERTIONS.png" alt="" width="577" height="426" /></a></p>
<p style="text-align: left;">この設定でリリースビルド時に<span style="color: #ff0000;"><strong>NS_BLOCK_ASSERTIONS</strong></span>が定義がされ、NSAssertが無効になります。</p>
<h2 style="text-align: left;">NSLogを無効にする</h2>
<p>リリースビルドの時に<span style="color: #ff0000;"><strong>NSLogマクロを空で定義する</strong></span>という方法で無効化します。</p>
<p>今回はリリース時の判断方法として上で説明した NS_BLOCK_ASSERTIONS を使います。もちろん別の判断用のマクロを用意しても問題ありません。</p><pre class="crayon-plain-tag">#ifdef NS_BLOCK_ASSERTIONS

#ifndef NSLog
// NSLogを無効にする
#define NSLog( m, args... )
#endif

#else

#ifndef NSLog
#define NSLog( m, args... ) NSLog( m, ##args )
#endif

#endif</pre><p>この記述を<span style="color: #ff0000;"><strong>全てのファイルに適応させる簡単な方法はプロジェクト名_Prefix.pchに記述</strong></span>することです。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/Prefix.png"><img class="aligncenter  wp-image-615" title="Prefix" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/Prefix.png" alt="" width="520" height="236" /></a></p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/disable-nslog-nsassert/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS5でジオコーディング/逆ジオコーディングを行う</title>
		<link>http://www.crossbridge.biz/geocoder-ios5</link>
		<comments>http://www.crossbridge.biz/geocoder-ios5#comments</comments>
		<pubDate>Tue, 27 Mar 2012 15:25:06 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[CLGeocoder]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=550</guid>
		<description><![CDATA[<p>iOS5でジオコーディング/逆ジオコーディングを行う方法を説明します。 ジオコーディングとは地名、住所などから緯度/経度に変換することです。逆ジオコーディングはその逆で、緯度/経度から地名、住所に変換することです。 逆ジオコーディングは全てのiOSで行うことができますが、正ジオコーディングはiOS5以降の機能なので注意が必要です。 それでは続きでサンプルソースと共に説明します。サンプルソースはこちらです。 CLGeocoderクラスでジオコーディング行う iOS5からCLGeocoderクラスが追加されました。CLGeocderクラスは正ジオコーディングと逆ジオコーディングの両方を行うことができます。正引きから見てみましょう。 2行目：CLGeocorderクラスのインスタンスを生成 3〜12行目：geocodeAddressString:completionHandler:メソッドでジオコーディングを実行。それぞれ住所（地名）と完了時に呼ばれるBlockを指定 ジオコーディングの実行は非同期で行われ、完了するとcompletionHandler:に与えたBlockが実行されます。 結果はCLPlacemarkクラスがNSArrayで渡されます。NSArrayということから分かる通り、結果が必ず一カ所であるとは限りません。住所（地名）は複数指定することができ、単一の地名を指定するより、建物の名前と所在地の市の名前など複数指定した方が精度があがります。複数指定する場合は文字列をスペースやカンマで区切ります。 CLGeocoderクラスで逆ジオコーディング行う iOS4まではMapKitフレームワークのMKReverseGeocoderクラスを利用していましたが、iOS5以降で逆ジオコーディングをこのクラスを使います。 ※iOS5からMKReverseGeocoderクラスは非推奨となっています 2行目：CLGeocorderクラスのインスタンスを生成 3,4行目：逆ジオコーディングを行う緯度と経度からCLLocationクラスのインスタンスを生成 6〜29行目：reverseGeocodeLocation:completionHandler:メソッドで逆ジオコーディングを実行。それぞれ対象となる緯度、経度のCLLocationと完了時に呼ばれるBlockを指定 正引きのジオコーディングと同様に結果はCLPlacemarkクラスがNSArrayで渡されます。サンプルでは結果の場所の情報をNSLogで出力しています。CLPlacemarkクラスの詳細はリファレンスを参照してください。 今回使用したサンプルソースはこちらで公開しています。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>iOS5でジオコーディング/逆ジオコーディングを行う方法を説明します。</p>
<p>ジオコーディングとは地名、住所などから緯度/経度に変換することです。逆ジオコーディングはその逆で、緯度/経度から地名、住所に変換することです。</p>
<p>逆ジオコーディングは全てのiOSで行うことができますが、<span style="color: #ff0000;"><strong>正ジオコーディングはiOS5以降の機能</strong></span>なので注意が必要です。</p>
<p>それでは続きでサンプルソースと共に説明します。サンプルソースは<a href="https://github.com/CrossBridge/GeocodingSample-iOS5" target="_blank">こちら</a>です。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/GeocordingSample.png"><img class="aligncenter  wp-image-590" title="GeocordingSample" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/GeocordingSample.png" alt="" width="221" height="430" /></a></p>
<p><span id="more-550"></span></p>
<h2>CLGeocoderクラスでジオコーディング行う</h2>
<p>iOS5から<strong><span style="color: #ff0000;">CLGeocoderクラス</span></strong>が追加されました。CLGeocderクラスは正ジオコーディングと逆ジオコーディングの両方を行うことができます。正引きから見てみましょう。</p><pre class="crayon-plain-tag">- (void)geocorde:(NSString *)addressString {
  CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease];
  [geocoder geocodeAddressString:addressString
               completionHandler:^(NSArray* placemarks, NSError* error) {
                 // 住所からジオコーディングを行った結果（場所）の数
                 NSLog(@&quot;found : %d&quot;, [placemarks count]);
                 for (CLPlacemark* placemark in placemarks) {
                   // それぞれの結果（場所）の情報
                   NSLog(@&quot;latitude : %f&quot;, placemark.location.coordinate.latitude);
                   NSLog(@&quot;longitude : %f&quot;, placemark.location.coordinate.longitude);
                 }
               }];
}</pre><p>2行目：CLGeocorderクラスのインスタンスを生成</p>
<p>3〜12行目：geocodeAddressString:completionHandler:メソッドでジオコーディングを実行。それぞれ住所（地名）と完了時に呼ばれるBlockを指定</p>
<p><strong><span style="color: #ff0000;">ジオコーディングの実行は非同期</span></strong>で行われ、完了するとcompletionHandler:に与えたBlockが実行されます。</p>
<p>結果は<span style="color: #ff0000;"><strong>CLPlacemarkクラス</strong></span>がNSArrayで渡されます。NSArrayということから分かる通り、結果が必ず一カ所であるとは限りません。住所（地名）は複数指定することができ、単一の地名を指定するより、建物の名前と所在地の市の名前など複数指定した方が精度があがります。複数指定する場合は文字列をスペースやカンマで区切ります。</p>
<h2>CLGeocoderクラスで逆ジオコーディング行う</h2>
<p>iOS4まではMapKitフレームワークのMKReverseGeocoderクラスを利用していましたが、iOS5以降で逆ジオコーディングをこのクラスを使います。<br />
※<span style="color: #ff0000;"><strong>iOS5からMKReverseGeocoderクラスは非推奨</strong></span>となっています</p><pre class="crayon-plain-tag">- (void)reverseGeocordeWithLatitude:(double)latitude longitude:(double)longitude {
  CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease];
  CLLocation *location = [[[CLLocation alloc] initWithLatitude:latitude
                                                     longitude:longitude] autorelease];

  [geocoder reverseGeocodeLocation:location
                 completionHandler:^(NSArray* placemarks, NSError* error) {
                   // 経度、緯度から逆ジオコーディングを行った結果（場所）の数
                   NSLog(@&quot;found : %d&quot;, [placemarks count]);

                   for (CLPlacemark *placemark in placemarks) {
                     // それぞれの結果（場所）の情報
                     NSLog(@&quot;addressDictionary : %@&quot;, [placemark.addressDictionary description]);

                     NSLog(@&quot;name : %@&quot;, placemark.name);
                     NSLog(@&quot;thoroughfare : %@&quot;, placemark.thoroughfare);
                     NSLog(@&quot;subThoroughfare : %@&quot;, placemark.subThoroughfare);
                     NSLog(@&quot;locality : %@&quot;, placemark.locality);
                     NSLog(@&quot;subLocality : %@&quot;, placemark.subLocality);
                     NSLog(@&quot;administrativeArea : %@&quot;, placemark.administrativeArea);
                     NSLog(@&quot;subAdministrativeArea : %@&quot;, placemark.subAdministrativeArea);
                     NSLog(@&quot;postalCode : %@&quot;, placemark.postalCode);
                     NSLog(@&quot;ISOcountryCode : %@&quot;, placemark.ISOcountryCode);
                     NSLog(@&quot;country : %@&quot;, placemark.country);
                     NSLog(@&quot;inlandWater : %@&quot;, placemark.inlandWater);
                     NSLog(@&quot;ocean : %@&quot;, placemark.ocean);
                     NSLog(@&quot;areasOfInterest : %@&quot;, placemark.areasOfInterest);
                   }
                 }];</pre><p>2行目：CLGeocorderクラスのインスタンスを生成</p>
<p>3,4行目：逆ジオコーディングを行う緯度と経度からCLLocationクラスのインスタンスを生成</p>
<p>6〜29行目：reverseGeocodeLocation:completionHandler:メソッドで逆ジオコーディングを実行。それぞれ対象となる緯度、経度のCLLocationと完了時に呼ばれるBlockを指定</p>
<p>正引きのジオコーディングと同様に結果は<span style="color: #ff0000;"><strong>CLPlacemarkクラス</strong></span>がNSArrayで渡されます。サンプルでは結果の場所の情報をNSLogで出力しています。CLPlacemarkクラスの詳細は<a href="http://developer.apple.com/library/ios/#DOCUMENTATION/CoreLocation/Reference/CLPlacemark_class/Reference/Reference.html" target="_blank">リファレンス</a>を参照してください。</p>
<p>今回使用したサンプルソースは<a href="https://github.com/CrossBridge/GeocodingSample-iOS5" target="_blank">こちら</a>で公開しています。</p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/geocoder-ios5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ImageOptimを使ってPNG/JPEG/GIF画像のファイルサイズを小さくする</title>
		<link>http://www.crossbridge.biz/imageoptim</link>
		<comments>http://www.crossbridge.biz/imageoptim#comments</comments>
		<pubDate>Sun, 25 Mar 2012 01:50:42 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[ImageOptim]]></category>
		<category><![CDATA[画像]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=523</guid>
		<description><![CDATA[<p>3G回線を使用した時のAppStoreからのダウンロード制限が50MBに緩和されたとはいえ、アプリのサイズは小さくしたいものです。 RetinaディスプレイのiPadの登場でさらにアプリのサイズは膨らむ方向に・・・ そこで今回はオープンソースのImageOptimというMac用のアプリケーションを紹介します。このImageOptimはPNG画像、JPEG画像、GIFアニメーションファイルを最適化/圧縮することでファイルサイズを小さくするアプリケーションです。 使い方も最適化/圧縮したいファイルをドラッグ&#38;ドロップするだけとお手軽です。それでは続きでダウンロードサイト、使い方を説明します。 ダウンロード こちらのサイトからダウンロードします。ページの右側にダウンロードと書かれたボタンがあるので押してダウンロードします。ファイルは圧縮されているので解凍して、アプリケーションフォルダにコピーしてインストール完了です。 ※2012/3/25現在の最新バージョンは1.4.0です 使い方 起動すると下のようなウインドウが表示されます。 ファイルサイズを小さくしたい画像ファイルをドラッグ&#38;ドロップします。 ドラッグ＆ドロップすると自動で最適化が開始され、完了したら最適化された割合が表示されます。 今回使用した画像はファイルサイズが57.5%抑えられました。デフォルトの設定では最適化されたファイルは、元のファイル自体に上書きされるため注意してください。後述する設定画面で、上書きしない設定を行うことができます。 フォルダごとドラック&#38;ドロップを行うと、フォルダ内の画像を連続して最適化してくれます。 　 ImageOptimの設定画面 ImageOptimの画面上部のメニューからPreferencesを選択すると設定画面が開きます。 基本的に設定は触らなくても大丈夫ですが、最適化する前のファイルを残しておきたい場合は「Backup original files before saving」にチェックを入れましょう。チェックを入れると最適化する前のファイルは拡張子の末尾に「~」が追加されて残ります。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>3G回線を使用した時のAppStoreからのダウンロード制限が50MBに緩和されたとはいえ、アプリのサイズは小さくしたいものです。</p>
<p>RetinaディスプレイのiPadの登場でさらにアプリのサイズは膨らむ方向に・・・</p>
<p>そこで今回はオープンソースの<span style="color: #ff0000;"><strong>ImageOptim</strong></span>というMac用のアプリケーションを紹介します。このImageOptimはPNG画像、JPEG画像、GIFアニメーションファイルを最適化/圧縮することでファイルサイズを小さくするアプリケーションです。</p>
<p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/65a1795239032fad6918356c5475859d.png"><img class="aligncenter" title="ImageOptim_完了フォルダ" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/65a1795239032fad6918356c5475859d.png" alt="" width="350" height="257" /></a></p>
<p>使い方も最適化/圧縮したいファイルをドラッグ&amp;ドロップするだけとお手軽です。それでは続きでダウンロードサイト、使い方を説明します。</p>
<p><span id="more-523"></span></p>
<h2 style="text-align: left;">ダウンロード</h2>
<p style="text-align: left;"><a href="http://imageoptim.com/" target="_blank">こちらのサイト</a>からダウンロードします。ページの右側にダウンロードと書かれたボタンがあるので押してダウンロードします。ファイルは圧縮されているので解凍して、アプリケーションフォルダにコピーしてインストール完了です。</p>
<p style="text-align: left;">※2012/3/25現在の最新バージョンは1.4.0です</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/cfc0d71fe661d6c177ee0b4aece0caa9.png"><img class="aligncenter  wp-image-528" title="ImageOptim_ホームページ" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/cfc0d71fe661d6c177ee0b4aece0caa9.png" alt="" width="446" height="317" /></a></p>
<h2 style="text-align: left;">使い方</h2>
<p style="text-align: left;">起動すると下のようなウインドウが表示されます。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/7954a2ca0b9b3dd3a07924b0926ea8cf.png"><img class="aligncenter  wp-image-526" title="ImageOptim_起動直後" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/7954a2ca0b9b3dd3a07924b0926ea8cf.png" alt="" width="340" height="249" /></a></p>
<p style="text-align: left;">ファイルサイズを小さくしたい画像ファイルをドラッグ&amp;ドロップします。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/c079b8873457e877f610c207cca29f91.png"><img class="aligncenter  wp-image-536" title="ImageOptim_ドラッグアンドドロップ" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/c079b8873457e877f610c207cca29f91.png" alt="" width="449" height="229" /></a></p>
<p style="text-align: left;">ドラッグ＆ドロップすると自動で最適化が開始され、完了したら最適化された割合が表示されます。<br />
今回使用した画像はファイルサイズが57.5%抑えられました。<span style="color: #ff0000;"><strong>デフォルトの設定では最適化されたファイルは、元のファイル自体に上書きされるため注意してください。</strong></span>後述する設定画面で、上書きしない設定を行うことができます。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/7d79aa853b84bf5ccc7add2d2f8130b6.png"><img class="aligncenter  wp-image-537" title="ImageOptim_完了" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/7d79aa853b84bf5ccc7add2d2f8130b6.png" alt="" width="350" height="257" /></a></p>
<p style="text-align: left;">フォルダごとドラック&amp;ドロップを行うと、フォルダ内の画像を連続して最適化してくれます。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/7e60cdfe573a71e566ee5cfcfb7ca214.png"><img class="wp-image-540 alignnone" title="ImageOptim_フォルダドラッグアンドドロップ" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/7e60cdfe573a71e566ee5cfcfb7ca214.png" alt="" width="452" height="227" /></a>　<a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/65a1795239032fad6918356c5475859d.png"><img class="aligncenter  wp-image-541" title="ImageOptim_完了フォルダ" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/65a1795239032fad6918356c5475859d.png" alt="" width="350" height="257" /></a></p>
<h2 style="text-align: left;">ImageOptimの設定画面</h2>
<p style="text-align: left;">ImageOptimの画面上部のメニューからPreferencesを選択すると設定画面が開きます。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/ImageOptim_Preferences.png"><img class="aligncenter  wp-image-527" title="ImageOptim_Preferences" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/ImageOptim_Preferences.png" alt="" width="457" height="234" /></a></p>
<p style="text-align: left;">基本的に設定は触らなくても大丈夫ですが、<span style="color: #ff0000;"><strong>最適化する前のファイルを残しておきたい場合は「Backup original files before saving」にチェック</strong></span>を入れましょう。チェックを入れると最適化する前のファイルは拡張子の末尾に「~」が追加されて残ります。</p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/imageoptim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIWebViewでも確実にロングプレスをハンドリングする</title>
		<link>http://www.crossbridge.biz/longpress-cbwindow</link>
		<comments>http://www.crossbridge.biz/longpress-cbwindow#comments</comments>
		<pubDate>Wed, 21 Mar 2012 13:29:00 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[UIGestureRecognizer]]></category>
		<category><![CDATA[UILongPressGestureRecognizer]]></category>
		<category><![CDATA[UIWindow]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=492</guid>
		<description><![CDATA[<p>初代iPadの発売とともにリリースされたiOS3.2から UIGestureRecognizer というクラスが用意されました。 UIGestureRecognizerクラスを使うと様々なジェスチャーを簡単に識別することができます。UIGestureRecognizerクラスのサブクラスである UILongPressGestureRecognizerクラス は任意のビュー(UIView)に登録することでロングプレス(長押し、ロングタップ)をハンドリングすることができます。 重宝するUILongPressGestureRecognizerクラスですが、UIWebViewに登録した場合に長押しをすると、文字や画像の選択になってしまい、ロングプレスがハンドリングできない場合があります。 とてももどかしい思いをするので、別の方法で ロングプレスをハンドリングしてみようと思います。 それでは続きへどうぞ。 UIWindowクラスでイベントのフックを行う UIWebViewではUIGestureRecognizerクラスを使ってイベントハンドリングが上手く行かない場合があるので、UIWindowクラスのイベントを配送する箇所でイベントのハンドリング（フック）を行います。 長押しのイベントハンドリングするCBWindowクラスを作成しました。GitHubで公開しています。今回はこのソースを元に説明します。 UIWindowクラスのsendEventメソッド sendEventメソッドでイベントの配送を行うため、このメソッドをオーバーライドしてロングプレスのハンドリングを行います。 作成したCBWindowではNotificationで以下のイベントを通知しています。 ロングプレスの開始 ロングプレス中に移動 ロングプレスの終了 ロングプレスのキャンセル（途中で2本目の指をタッチするなど） Notificationの名前はCBWindow.hで以下のように定義しています。 オーバーライドしたsendEventメソッドを見てみましょう。 ■CBWindow.m 7行目：引数で渡ってくるUIEventクラスのインスタンスからUITouchを取り出す。 8行目：一本の指の時だけロングプレスを認識させるため、countを確認。2本以上の指のイベントが発生して、その時にロングプレス中であれば、キャンセルのNotification（kNotificationNameCancelLongPress）を発行。 10〜51行目：タッチイベントを元に、ロングプレスの判断を行う（後述）。 sendEventメソッドのタッチイベント ・UITouchPhaseBegan ロングプレスのハンドリング用のタイマーを開始。発火までに他のイベントが発生しなければロングプレスと認識してNotification(kNotificationNameStartLongPress)を発行。 ※タイマーは0.25秒（kMinimumPressDurationで定義） ・UITouchPhaseMoved ロングプレスのタイマーを停止。ロングプレス中であればNotification(kNotificationNameMovedLongPress)を発行。 ・UITouchPhaseEnded/UITouchPhaseCancelled ロングプレスのタイマーを停止。ロングプレス中であればNotification(kNotificationNameEndLongPress)を発行。 Notificationの発行 postNotificationメソッドでロングプレスのNotificationを発行しています。NotificationのuserInfoで座標を伝えています。タッチの開始、移動、終了の座標を知ることができます。 ■CBWindow.m このNotificationを受け取った側は以下のように座標を取り出すことができます。 CBWindowとサンプルソース GitHubに公開しているプロジェクトはUIWebViewが表示され、ロングプレスを行うとログに座標が表示されるものです。 ダウンロードはこちらからどうぞ。</p>
 ]]></description>
			<content:encoded><![CDATA[<p>初代iPadの発売とともにリリースされたiOS3.2から <strong><span style="color: #ff0000;">UIGestureRecognizer</span></strong> というクラスが用意されました。</p>
<p>UIGestureRecognizerクラスを使うと様々なジェスチャーを簡単に識別することができます。UIGestureRecognizerクラスのサブクラスである <strong><span style="color: #ff0000;">UILongPressGestureRecognizer</span></strong>クラス は任意のビュー(UIView)に登録することでロングプレス(長押し、ロングタップ)をハンドリングすることができます。</p>
<p>重宝するUILongPressGestureRecognizerクラスですが、UIWebViewに登録した場合に長押しをすると、文字や画像の選択になってしまい、ロングプレスがハンドリングできない場合があります。</p>
<p style="text-align: center;"><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/2cf5ac0fa9e0dfe113dce61c43c752e6.png"><img class="aligncenter  wp-image-498" style="border-width: 1px; border-color: black; border-style: solid;" title="UIWebViewでロングプレス" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/2cf5ac0fa9e0dfe113dce61c43c752e6.png" alt="" width="224" height="337" /></a></p>
<p>とてももどかしい思いをするので、別の方法で ロングプレスをハンドリングしてみようと思います。</p>
<p>それでは続きへどうぞ。</p>
<p><span id="more-492"></span></p>
<h2>UIWindowクラスでイベントのフックを行う</h2>
<p>UIWebViewではUIGestureRecognizerクラスを使ってイベントハンドリングが上手く行かない場合があるので、<span style="color: #ff0000;"><strong>UIWindowクラスのイベントを配送する箇所でイベントのハンドリング（フック）</strong></span>を行います。</p>
<p>長押しのイベントハンドリングするCBWindowクラスを作成しました。<a href="https://github.com/CrossBridge/CBWindow" target="_blank">GitHubで公開</a>しています。今回はこのソースを元に説明します。</p>
<h2>UIWindowクラスのsendEventメソッド</h2>
<p><span style="color: #ff0000;"><strong>sendEventメソッドでイベントの配送を行うため、このメソッドをオーバーライド</strong></span>してロングプレスのハンドリングを行います。</p>
<p>作成したCBWindowではNotificationで以下のイベントを通知しています。</p>
<ul>
<li>ロングプレスの開始</li>
<li>ロングプレス中に移動</li>
<li>ロングプレスの終了</li>
<li>ロングプレスのキャンセル（途中で2本目の指をタッチするなど）</li>
</ul>
<p>Notificationの名前はCBWindow.hで以下のように定義しています。</p><pre class="crayon-plain-tag">#define kNotificationNameStartLongPress   @&quot;StartLongPressNotification&quot;
#define kNotificationNameMovedLongPress   @&quot;MovedLongPressNotification&quot;
#define kNotificationNameEndLongPress     @&quot;EndLongPressNotification&quot;
#define kNotificationNameCancelLongPress  @&quot;CancelLongPressNotification&quot;</pre><p></p>
<p lang="objc">オーバーライドしたsendEventメソッドを見てみましょう。</p>
<p><span style="text-decoration: underline;">■CBWindow.m</span></p><pre class="crayon-plain-tag">- (void)sendEvent:(UIEvent *)event {
  NSSet *touches = [event touchesForWindow:self];
  [touches retain];

  [super sendEvent:event];

  UITouch *touch = [touches anyObject];
  if ([touches count] == 1) {

    switch ([touch phase]) {
      case UITouchPhaseBegan:
        [longPressTimer_ invalidate];

        CGPoint coordinate = [touch locationInView:self];
        NSDictionary *coordinateDic = [NSDictionary dictionaryWithObjectsAndKeys:
                                       [NSValue value:&amp;amp;coordinate withObjCType:@encode(CGPoint)],
                                       @&quot;coordinate&quot;, nil];

        longPressTimer_ = [NSTimer scheduledTimerWithTimeInterval:kMinimumPressDuration
                                                           target:self
                                                         selector:@selector(longPressTimerHandle:)
                                                         userInfo:coordinateDic
                                                          repeats:NO];
        break;

      case UITouchPhaseMoved:
        [longPressTimer_ invalidate];
        longPressTimer_ = nil;

        if (isKeepLongpPress_) {
          [self postNotification:kNotificationNameMovedLongPress
                      coordinate:[touch locationInView:self]];
        }

        break;

      case UITouchPhaseEnded:
      case UITouchPhaseCancelled:
        [longPressTimer_ invalidate];
        longPressTimer_ = nil;

        if (isKeepLongpPress_) {
          [self postNotification:kNotificationNameEndLongPress
                      coordinate:[touch locationInView:self]];
        }
        isKeepLongpPress_ = NO;
        break;

      default:
        break;
    }
  } else {
    [longPressTimer_ invalidate];
    longPressTimer_ = nil;
    if (isKeepLongpPress_) {
      [self postNotification:kNotificationNameEndLongPress
                  coordinate:[touch locationInView:self]];
    }
    isKeepLongpPress_ = NO;
  }

  [touches release];
}</pre><p>7行目：引数で渡ってくるUIEventクラスのインスタンスからUITouchを取り出す。</p>
<p>8行目：一本の指の時だけロングプレスを認識させるため、countを確認。2本以上の指のイベントが発生して、その時にロングプレス中であれば、<span style="color: #ff0000;"><strong>キャンセルのNotification（kNotificationNameCancelLongPress）</strong></span>を発行。</p>
<p>10〜51行目：タッチイベントを元に、ロングプレスの判断を行う（後述）。</p>
<h2>sendEventメソッドのタッチイベント</h2>
<h3>・UITouchPhaseBegan</h3>
<p>ロングプレスのハンドリング用のタイマーを開始。発火までに他のイベントが発生しなければロングプレスと認識して<span style="color: #ff0000;"><strong>Notification(kNotificationNameStartLongPress)</strong></span>を発行。<br />
※タイマーは0.25秒（kMinimumPressDurationで定義）</p>
<h3>・UITouchPhaseMoved</h3>
<p>ロングプレスのタイマーを停止。ロングプレス中であれば<span style="color: #ff0000;"><strong>Notification(kNotificationNameMovedLongPress)</strong></span>を発行。</p>
<h3>・UITouchPhaseEnded/UITouchPhaseCancelled</h3>
<p>ロングプレスのタイマーを停止。ロングプレス中であれば<span style="color: #ff0000;"><strong>Notification(kNotificationNameEndLongPress)</strong></span>を発行。</p>
<h2>Notificationの発行</h2>
<p>postNotificationメソッドでロングプレスのNotificationを発行しています。NotificationのuserInfoで座標を伝えています。タッチの開始、移動、終了の座標を知ることができます。</p>
<p>■CBWindow.m</p><pre class="crayon-plain-tag">- (void)postNotification:(NSString *)notificationName coordinate:(CGPoint)coordinate {
  NSLog(@&quot;%s %@ %@&quot;, __PRETTY_FUNCTION__, notificationName, NSStringFromCGPoint(coordinate));

  NSDictionary *coordinateDic = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithFloat:coordinate.x], @&quot;x&quot;,
                                 [NSNumber numberWithFloat:coordinate.y], @&quot;y&quot;, nil];
  [[NSNotificationCenter defaultCenter] postNotificationName:notificationName
                                                      object:nil
                                                    userInfo:coordinateDic];
}</pre><p>このNotificationを受け取った側は以下のように座標を取り出すことができます。</p><pre class="crayon-plain-tag">- (void)handleStartLongPressNotification:(NSNotification*)notification {
  NSLog(@&quot;%s x:%f y:%f&quot;,
        __PRETTY_FUNCTION__,
        [[[notification userInfo] objectForKey:@&quot;x&quot;] floatValue],
        [[[notification userInfo] objectForKey:@&quot;y&quot;] floatValue]);
}</pre><p></p>
<h2 lang="objc">CBWindowとサンプルソース</h2>
<p lang="objc">GitHubに公開しているプロジェクトはUIWebViewが表示され、ロングプレスを行うとログに座標が表示されるものです。</p>
<p lang="objc">ダウンロードは<a href="https://github.com/CrossBridge/CBWindow" target="_blank">こちら</a>からどうぞ。</p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/longpress-cbwindow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIViewの角を丸める方法</title>
		<link>http://www.crossbridge.biz/uiview-cornerradius</link>
		<comments>http://www.crossbridge.biz/uiview-cornerradius#comments</comments>
		<pubDate>Sun, 18 Mar 2012 14:00:01 +0000</pubDate>
		<dc:creator>kkato</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[clipsToBounds]]></category>
		<category><![CDATA[cornerRadius]]></category>
		<category><![CDATA[UIView]]></category>

		<guid isPermaLink="false">http://www.crossbridge.biz/?p=397</guid>
		<description><![CDATA[<p>簡単にUIView(を継承したクラス)の角を丸めることができます。 InterfaceBuilderからは設定ができないのでソースコードで設定を行います。 以下の手順で設定します。 QuartzCore.frameworkを追加 QuartzCore/QuartzCore.hをインポート layer.cornerRadius、clipsToBoundsを設定 QuartzCore/QuartzCore.hをインポートするのを忘れるとコンパイルが通らないので注意して下さい。 ・サンプルコード</p>
 ]]></description>
			<content:encoded><![CDATA[<p>簡単に<span style="color: #ff0000;"><strong>UIView(を継承したクラス)の角を丸める</strong></span>ことができます。<br />
InterfaceBuilderからは設定ができないのでソースコードで設定を行います。</p>
<p>以下の手順で設定します。</p>
<ol>
<li>QuartzCore.frameworkを追加</li>
<li>QuartzCore/QuartzCore.hをインポート</li>
<li>layer.cornerRadius、clipsToBoundsを設定</li>
</ol>
<p>QuartzCore/QuartzCore.hをインポートするのを忘れるとコンパイルが通らないので注意して下さい。</p>
<p>・サンプルコード</p><pre class="crayon-plain-tag">UIImage image = [UIImage imageNamed:@&quot;image.png&quot;];
imageView.layer.cornerRadius = 5.0f;
imageView.clipsToBounds = true;</pre><p><a href="http://www.crossbridge.biz/wp-content/uploads/2012/03/c7e49e10475d01ddfc3e22b1858dc49b1.png"><img class="alignnone  wp-image-416" title="cornerRadiusありなし比較" src="http://www.crossbridge.biz/wp-content/uploads/2012/03/c7e49e10475d01ddfc3e22b1858dc49b1.png" alt="" width="562" height="214" /></a></p>
<p><iframe width="468" height="336" style="border: none;" src="http://rcm-jp.amazon.co.jp/e/cm?t=crossbridge-22&amp;o=9&amp;p=16&amp;l=st1&amp;mode=books-jp&amp;search=iPhone cocoa objective-c&amp;fc1=000000&amp;lt1=_blank&amp;lc1=3366FF&amp;bg1=FFFFFF&amp;f=ifr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.crossbridge.biz/uiview-cornerradius/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

