<?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>Hi-farm blog &#187; Cocoa(Objective-C)</title>
	<atom:link href="http://blog.hi-farm.net/category/cocoa/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hi-farm.net</link>
	<description>ActionScript 3.0 , AIR , FLEXからCocoa, OpenGL</description>
	<lastBuildDate>Sun, 05 Sep 2010 20:05:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[iPad] 外部出力方法</title>
		<link>http://blog.hi-farm.net/2010/09/06/ipad-%e5%a4%96%e9%83%a8%e5%87%ba%e5%8a%9b%e6%96%b9%e6%b3%95/</link>
		<comments>http://blog.hi-farm.net/2010/09/06/ipad-%e5%a4%96%e9%83%a8%e5%87%ba%e5%8a%9b%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 20:05:42 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[Cocoa(Objective-C)]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=278</guid>
		<description><![CDATA[やっぱり久々なポストです。
iPadでは外部映像出力が可能なので、それを試しているのですが、ちょっと解らずハマっていた事があったのでメモ程度に書いておきますね。デバッグするのも困難ですし。
基本的な実装の手順としては、下記の通りです。
1. つながっているスクリーンを[UIScreen screens]がNSArrayで取得する。
2. 1.で取得したUIScreenからお好みのUIScreenModeを取得する。
3. UIScreenを取得する。
4. 取得したUIScreenのcurrentModeに2.で取得した内容を設定する。
5. 表示させたいコンテンツを作成する。
6. 外部出力させるためにUIWindowを作る。
7. 6.に表示させたいコンテンツをaddSubView: する。
8. window.screen に3.のUIScreenを設定する。
9. windowの基礎的な設定を行う。
以上です。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;

// ログとして外部モニターに表示する内容
// log message displayed in external monitor.
NSMutableString *str = [[NSMutableString alloc] init];
int screenCount = [[UIScreen screens] count];

// 設定されるスクリーンモード
// used screen mode
UIScreenMode *current = nil;

// checking each screen information
for(int i = 0; i &#60; screenCount; i++)
{
 int modelen = [[[[UIScreen screens] objectAtIndex:i] availableModes] [...]]]></description>
			<content:encoded><![CDATA[<p>やっぱり久々なポストです。</p>
<p>iPadでは外部映像出力が可能なので、それを試しているのですが、ちょっと解らずハマっていた事があったのでメモ程度に書いておきますね。デバッグするのも困難ですし。</p>
<p>基本的な実装の手順としては、下記の通りです。<br />
1. つながっているスクリーンを[UIScreen screens]がNSArrayで取得する。<br />
2. 1.で取得したUIScreenからお好みのUIScreenModeを取得する。<br />
3. UIScreenを取得する。<br />
4. 取得したUIScreenのcurrentModeに2.で取得した内容を設定する。<br />
5. 表示させたいコンテンツを作成する。<br />
6. 外部出力させるためにUIWindowを作る。<br />
7. 6.に表示させたいコンテンツをaddSubView: する。<br />
8. window.screen に3.のUIScreenを設定する。<br />
9. windowの基礎的な設定を行う。</p>
<p>以上です。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<pre class="brush: plain;">
// ログとして外部モニターに表示する内容
// log message displayed in external monitor.
NSMutableString *str = [[NSMutableString alloc] init];
int screenCount = [[UIScreen screens] count];

// 設定されるスクリーンモード
// used screen mode
UIScreenMode *current = nil;

// checking each screen information
for(int i = 0; i &lt; screenCount; i++)
{
 int modelen = [[[[UIScreen screens] objectAtIndex:i] availableModes] count];

 // checking each screen mode in screen.
 for (int j = 0; j &lt; modelen; j++)
 {
   // getting screen mode
   UIScreenMode *curMode = [[[[UIScreen screens] objectAtIndex:i] availableModes]
 objectAtIndex:j];

   // get information of screen.
   NSString *sstr = [NSString stringWithFormat:@&quot;screen:%i, mode:%i, w:%f, h:%f,
  ratio:%f ---&quot;, i, j, current.size.width, current.size.height,
current.pixelAspectRatio];

   [str appendString:sstr];

   // if curMode.size.width is larger than current, change current reference
   if(curMode.size.width &gt; current.size.width){
    current = curMode;
    }
   }
  }

  // screen object
  UIScreen *another = [[UIScreen screens] objectAtIndex:1];
  another.currentMode = current;
  CGSize size = current.size;
  uvc = [[UIViewController alloc] init];

  // create new window.
  UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(
 0.0f,
 0.0f,
 size.width,
 size.height
)];

UITextView *tv = [[UITextView alloc] initWithFrame:CGRectMake(
0.0f, 0.0f, 800.0f, 800.0f)
];
[uvc.view addSubview:tv];
tv.text = str;

[tv release];

[window addSubview:uvc.view];
window.screen = another;

[window makeKeyAndVisible];
[window setHidden:NO];
</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
※syntaxhighlighterをうまくつかえていないので改行をくわえています。</p>
<p>ちなみにgithubにのせてますのでご興味のある方はご覧下さい。<br />
<a href="http://github.com/mmlemon/iPad-external-display-sample" target="_blank">http://github.com/mmlemon/iPad-external-display-sample</a></p>
<p>何か間違いやご不明な点があればお気軽にご質問下さいね！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2010/09/06/ipad-%e5%a4%96%e9%83%a8%e5%87%ba%e5%8a%9b%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhoneでFlashの画面を操作する</title>
		<link>http://blog.hi-farm.net/2010/02/25/iphone%e3%81%a7flash%e3%81%ae%e7%94%bb%e9%9d%a2%e3%82%92%e6%93%8d%e4%bd%9c%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.hi-farm.net/2010/02/25/iphone%e3%81%a7flash%e3%81%ae%e7%94%bb%e9%9d%a2%e3%82%92%e6%93%8d%e4%bd%9c%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 00:29:15 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[Cocoa(Objective-C)]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[iPhone勉強]]></category>
		<category><![CDATA[勉強会とか]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=235</guid>
		<description><![CDATA[以前、名古屋のFxugにて少し発表した内容なんですが、ずっと記事にできてなかったので、今更ながらまとめます。
密かに前から社内用発表会のネタとして作ってはいたのですが、僕個人的にも、なかなか披露する機会がないまま、時間が [...]]]></description>
			<content:encoded><![CDATA[<p>以前、<a href="http://www.fxug.net/modules/bwiki/index.php?Flex%CA%D9%B6%AF%B2%F1%C2%E896%B2%F3%40%CC%BE%B8%C5%B2%B0%BB%B2%B2%C3%BC%F5%C9%D5" target="_blank">名古屋のFxug</a>にて少し発表した内容なんですが、ずっと記事にできてなかったので、今更ながらまとめます。</p>
<p>密かに前から社内用発表会のネタとして作ってはいたのですが、僕個人的にも、なかなか披露する機会がないまま、時間が過ぎてしまいました。</p>
<p>概要としては、<br />
1. iPhone上でボタンをタップすると、AIR 2で作ったサーバーに、iPhoneからSocket経由で信号を送ります。<br />
2. AIR 2のサーバーが、信号を受け取り、信号に応じた処理を行います。</p>
<p>これが作ったアプリのキャプチャです。</p>
<p><a rel="lightbox" href="http://blog.hi-farm.net/wp-content/uploads/2010/02/viewer.png"><img style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="viewer" src="http://blog.hi-farm.net/wp-content/uploads/2010/02/viewer.png" alt="viewer" width="800" height="223" /></a></p>
<p>iPhoneとAIR 2サーバーの関係は、この通りです。</p>
<p><a rel="lightbox" href="http://blog.hi-farm.net/wp-content/uploads/2010/02/kousei.png"><img class="aligncenter size-full wp-image-245" title="kousei" src="http://blog.hi-farm.net/wp-content/uploads/2010/02/kousei.png" alt="kousei" width="395" height="123" /></a></p>
<p>簡単に行ってしまえば、これだけです。<br />
では、ここから説明します。</p>
<p><strong>1. AIR 2のサーバー部分を作成</strong><br />
AIRでサーバーを作るには、UDPとTCPのサーバーがありますが、今回はTCPで通信するので、flash.net.ServerSocketクラスを使用します。</p>
<p>宣言〜受付開始</p>
<pre class="brush: plain;">
&lt;pre&gt;import flash.net.ServerSocket;

// 接続してきたSocketを保持する
var socks:Vector. = new Vector.();
// インスタンス生成
var server:ServerSocket = new ServerSocket();
// 接続時のイベントハンドラ作成
server.addEventListener(ServerSocketConnectEvent.CONNECT, serverSocketConnectHandler, false, 0, false);
// 待ち受けポートを指定（43243番で受け付ける）
server.bind(43243);
// 待ち受け開始
server.listenen();&lt;/pre&gt;
</pre>
<p>接続時：</p>
<pre>function serverSocketConnectHandler(event:ServerSocketConnectEvent):void
{
  // 接続してきたSocket
  var socket:Socket = event.socket;
  // 接続してきたSocketにデータを返すため、イベント設定
  socket.addEventListener(ProgressEvent.SOCKET_DATA, receiveHandler, false, 0, false);
  // 接続してきたSocketを保持する
  socks.push(socket);
}</pre>
<p>受信時：（本来は宛先を指定するべきだが、特に指定せず、全てのSocketに送信しています）</p>
<pre>function receiveHandler(event:ProgressEvent):void
{
  // データを送信したSocketを取得
  var socket:Socket = event.target as Socket;
  if(socket!=null)  // nullチェック
  {
    // 受信データを取得
    var recv:String = socket.readUTFBytes(socket.bytesAvailable);
    // 操作対象のVideoPlayerを取得
    var target:VideoPlayer = getCurrentVideo(); // 自作のメソッドです
    // コマンドを取得し、操作を実行。コマンドを取得するため、indexOfを使っています。
    if( recv.indexOf("prev") &gt;= 0) {
      setPos("prev");
    } else if( recv.indexOf("next") &gt;= 0) {
      setPos("next");
    } else if( recv.indexOf("play") &gt;= 0) {
      if( target.playing ) {
        target.pause();
      } else {
        target.play();
      }
    }
  }
}</pre>
<p>AIRで作るサーバー周りは、こんなところです。エラー処理や切断時の処理などは書いてなくてごめんなさい。</p>
<p><strong>iPhone側アプリケーションのSocket処理</strong><br />
では、次。iPhoneのほう。これも簡単な書き方でごめんなさいね。と、いうかCで最低限の実装しかしていないです。</p>
<p>TCPSendClient.m<br />
接続：</p>
<pre>-(void)connect:(NSString *)ip toPort:(NSInteger)port
{
  	if(_connected)  // TCPSendClientが持っている、接続状態を保持する変数
	{
		return;
	}
	_connected = NO;
	// IPアドレスを取得
	servIP = [ip UTF8String];
	// portを取得
	servPort = port;
	// socketが正しく生成できているかチェック
	if((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) &lt; 0)
	{
		NSLog(@"socket creation error.");
		return;
	}
	// socketの設定
	memset(&amp;servAddr, 0, sizeof(servAddr));
	servAddr.sin_family = AF_INET;
	servAddr.sin_addr.s_addr = inet_addr(servIP);
	servAddr.sin_port = htons(servPort);
	// 接続
	if(connect(sock, (struct sockaddr *)&amp;servAddr, sizeof(servAddr)) &lt; 0)
	{
		NSLog(@"connect error.");
		return;
	}
	_connected = YES;
	NSLog(@"connect succeed.");
}</pre>
<p>送信：</p>
<pre>-(void)send:(NSString *)message
{
  mes = [message UTF8String];
  mesLen = strlen(mes);
  // 送信
  if(send(sock, mes, mesLen, 0) != mesLen) {
    NSLog(@"send failed.");
  }
}</pre>
<p>ちなみに、<br />
TCPSendClientクラスは、Socket処理を受け持つクラスで、自作しています。<br />
TCPSendClient.hはこんな風に書いています。</p>
<pre>#import &lt;Foundation/Foundation.h&gt;
#import &lt;stdio.h&gt;
#import &lt;sys/socket.h&gt;
#import &lt;arpa/inet.h&gt;
#import &lt;stdlib.h&gt;
#import &lt;string.h&gt;
#import  &lt;unistd.h&gt;

@interface TCPSendClient : NSObject {
	int sock;
	struct sockaddr_in servAddr;
	unsigned short servPort;
	const char *servIP;
	const char *mes;
	unsigned int mesLen;
	BOOL _connected;
}

-(void)connect:(NSString *)ip toPort:(NSInteger)port;
-(void)send:(NSString *)message;
-(void)close;
-(BOOL)getConnected;
@property(readonly) BOOL connected;

@end</pre>
<p>このサンプルでは、このようにTCPSendClientを使っています。</p>
<p>PagerViewController.m</p>
<pre>-(IBAction) processConnect:(id)sender  // ボタンをタップした時のAction
{
	if([connectSwitch isOn])  // これは、接続のon/offを切り替えるUISwitchです。
	{
		[sendc connect:@"10.0.2.1" toPort:43243];  // sendcというのがTCPSendClientです
		stateField.text = @"connect";
	}
	else
	{
		[sendc close];  // 本文では紹介しなかったですが、切断します。
		stateField.text = @"disconnect";
	}
}</pre>
<p>データ送信：</p>
<pre>-(IBAction) btnUp:(id)sender  // 各ボタンのTouchUpInsideと関連づけています。
{
	isPress = NO;
	prevValue = 0;
	if( (UIButton*)sender == btn) // btnとは、一つ前の動画にフォーカスをあてるためのボタンです。
	{
		dir = @"prev";
		[sendc send:dir];
	}
	else if((UIButton*)sender == nextBtn) { // nextBtnとは、一つ次の動画にフォーカスをあてるためのボタンです。
		dir = @"next";
		[sendc send:dir];
	}
	else if((UIButton*)sender == playBtn) { // playBtnとは、フォーカスがあたっている動画を再生するためのボタンです。
		dir = @"play";
		[sendc send:dir];
	}
}</pre>
<p>ちなみに、こちらがiPhoneアプリの画面です。（すごい地味ですね。。。笑えない）</p>
<p>Interface Builderのキャプチャです。</p>
<p><a rel="lightbox" href="http://blog.hi-farm.net/wp-content/uploads/2010/02/ib.png"><img class="aligncenter size-full wp-image-244" title="ib" src="http://blog.hi-farm.net/wp-content/uploads/2010/02/ib.png" alt="ib" width="320" height="502" /></a></p>
<p><strong>Macをルーターにする</strong><br />
最後に、iPhoneとAIRサーバーを接続するための設定をします。Macなら「インターネット共有」を使えば簡単にルーターにして連携させる事が可能です。こういうときに、一つのメーカーが作っている事が良い事に思えますね。<br />
今回は、AirMac経由で共有します。</p>
<p><a rel="lightbox" href="http://blog.hi-farm.net/wp-content/uploads/2010/02/kyouyuu.png"><img class="aligncenter size-full wp-image-246" title="kyouyuu" src="http://blog.hi-farm.net/wp-content/uploads/2010/02/kyouyuu.png" alt="kyouyuu" width="668" height="547" /></a></p>
<p>1. 「システム環境設定」を開く<br />
2. 「共有」を開く<br />
3. 「インターネット共有」を選択する<br />
4. 「共有する接続回路」がAirMac以外であることを確認。なっていなければ変更します。<br />
→iPhoneとMacをAirMac（無線）で接続する<br />
5.  「インターネット共有」のチェックを入れると、共有を開始するか確認してきますので、開始をクリックします。すると、画面右のAirmacのアイコンがこのようになります。</p>
<p><a rel="lightbox" href="http://blog.hi-farm.net/wp-content/uploads/2010/02/airmac.png"><img class="aligncenter size-full wp-image-243" title="airmac" src="http://blog.hi-farm.net/wp-content/uploads/2010/02/airmac.png" alt="airmac" width="251" height="24" /></a></p>
<p>開始順としては、AIRサーバーとiPhoneが接続する必要があるので、<br />
1. Macをルーターにする<br />
2. AIRサーバーアプリを起動する<br />
3. iPhoneアプリを起動して接続する。<br />
4. iPhone上で操作する。</p>
<p>というところです。</p>
<p>今回簡単に紹介しすぎててすみません。このままでわかりにくいなどご意見ありましたら整理した上で、ソース込みで全て公開します。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2010/02/25/iphone%e3%81%a7flash%e3%81%ae%e7%94%bb%e9%9d%a2%e3%82%92%e6%93%8d%e4%bd%9c%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone]POSTでファイルアップロードもできるサンプルをアップしました。</title>
		<link>http://blog.hi-farm.net/2009/07/22/iphonepost%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e3%82%82%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%92/</link>
		<comments>http://blog.hi-farm.net/2009/07/22/iphonepost%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e3%82%82%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%92/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 21:22:55 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[Cocoa(Objective-C)]]></category>
		<category><![CDATA[iPhone勉強]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Multipart]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Post]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=217</guid>
		<description><![CDATA[現在作っているアプリでは、iPhoneからファイルとデータをアップロードする仕組みが必要になり調べてみたのですが、なかなか目的を達成してくれるクラスやライブラリが見つからなかったので自分で作ってみました。
ソースとテスト [...]]]></description>
			<content:encoded><![CDATA[<p>現在作っているアプリでは、iPhoneからファイルとデータをアップロードする仕組みが必要になり調べてみたのですが、なかなか目的を達成してくれるクラスやライブラリが見つからなかったので自分で作ってみました。<br />
ソースとテストで使ったPHPのファイルもgithubのここにおいています。<br />
<a href="http://wiki.github.com/mmlemon/HTTPMultipartPost" target="_blank">http://wiki.github.com/mmlemon/HTTPMultipartPost</a></p>
<p>ソースにはcopyrightとか書いていますが、改編などはご自由にどうぞ。ただし、こちらではいかなる責任も負いませんのでご了承下さい。</p>
<p>内容は、こんな感じです。</p>
<p>MultipartPostHelper：このクラスを使ってファイルのアップロードを行います。<br />
実際の使い方は、HTTPPostSample2ViewController.mをご確認下さい。</p>
<p>使用する流れは下記の通りです：</p>
<ol>
<li>送信先URLを設定する</li>
<li>文字列データ部分を作成する（Key用の配列と値用の配列が必要です。）</li>
<li>バイナリデータ部分を作成する（このとき、data=実際のデータ：NSData、orgName：ファイル名、postName:Postで使われる名前。例：orgName=&#8221;file.txt&#8221;, postName=&#8221;postFile&#8221;の場合、PHPでは、$_FILES["postFile"]["name"]とすると、&#8221;file.txt&#8221;が返されます。）</li>
<li>文字データをMultipartPostHelperに追加</li>
<li>バイナリデータをMultipartPostHelperに追加</li>
<li>sendで送信</li>
</ol>
<p>以上です。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2009/07/22/iphonepost%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e3%82%82%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%92/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>タイマー表示</title>
		<link>http://blog.hi-farm.net/2009/07/07/%e3%82%bf%e3%82%a4%e3%83%9e%e3%83%bc%e8%a1%a8%e7%a4%ba/</link>
		<comments>http://blog.hi-farm.net/2009/07/07/%e3%82%bf%e3%82%a4%e3%83%9e%e3%83%bc%e8%a1%a8%e7%a4%ba/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 12:08:37 +0000</pubDate>
		<dc:creator>hi-farm.net</dc:creator>
				<category><![CDATA[Cocoa(Objective-C)]]></category>
		<category><![CDATA[iPhone勉強]]></category>

		<guid isPermaLink="false">http://blog.hi-farm.net/?p=185</guid>
		<description><![CDATA[今作っているアプリで時間経過を表示する必要がありましたので、サンプルを作成しました。
ほとんどこちらのサイト様を参考にしています。ありがとうございます。
http://cocoa.synck.jp/1237172145. [...]]]></description>
			<content:encoded><![CDATA[<p>今作っているアプリで時間経過を表示する必要がありましたので、サンプルを作成しました。</p>
<p>ほとんどこちらのサイト様を参考にしています。ありがとうございます。</p>
<p><a href="http://cocoa.synck.jp/1237172145.html" target="_blank">http://cocoa.synck.jp/1237172145.html</a></p>
<p><a href="http://cocoa.synck.jp/1237172145.html" target="_blank"></a><br />
一式は<a title="github" href="https://github.com/" target="_blank">github</a>におきましたので、必要でしたらこちらからどうぞ。<br />
<a href="http://github.com/mmlemon/iPhoneTimerSample/tree/master">http://github.com/mmlemon/iPhoneTimerSample/tree/master</a></p>
<div id="attachment_186" class="wp-caption aligncenter" style="width: 160px"><a rel="lightbox" href="http://blog.hi-farm.net/wp-content/uploads/2009/07/cap.png"><img class="size-thumbnail wp-image-186" title="cap" src="http://blog.hi-farm.net/wp-content/uploads/2009/07/cap-150x150.png" alt="ストップウォッチアプリのキャプチャ" width="150" height="150" /></a><p class="wp-caption-text">ストップウォッチアプリのキャプチャ</p></div>
<h3>操作方法：</h3>
<ul>
<li>Startボタンをタップ：計測開始</li>
<li>Stopボタンをタップ：計測終了</li>
<li>再びStartをタップした場合、0秒から再計測します</li>
</ul>
<h3>ソースについて：</h3>
<p>時間を測る事は、</p>
<p>開始時刻をNSTimeIntervalで保持します。</p>
<p>現在時刻を保持する方法は、</p>
<p>NSTimeInterval time = [NSDate timeIntervalSinceReferenceDate];</p>
<p>を使うだけです。</p>
<p>二つのNSTimeIntervalを比較するには、単純に引き算するだけです。</p>
<p>NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate] &#8211; time;</p>
<p>（※timeは計測開始時刻を保持するNSTimeInterval）</p>
<p>定期的に表示時刻をアップデートするにはNSTimerを使います。こんな感じ。</p>
<pre class="brush: plain;">

self.timer =  [NSTimer scheduledTimerWithTimeInterval: 0.01                                   target:self                                  selector:@selector(updateTimer:)                                  userInfo:nil                                   repeats:YES];
</pre>
<p>scheduledTimerWithTImeIntervalがタイマーが呼ばれる期間であり、</p>
<p>selectorがこのscheduledTimerWithTimeIntervalで定期的に呼ばれるセレクタ（メソッド？）である、という事を押さえておけばよいと思います。</p>
<p>ちなみに、selectorで呼ばれるものは、</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">-(<span style="color: #760f50;">void</span>)updateTimer:(NSTimer *)t</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">のようになる必要があります。</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">ここで経過時刻を測定、表示すれば継続的に表示が更新されるようになります。</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">タイマーを終了する場合は、</p>
<pre class="brush: plain;">
[self.timer invalidate];
</pre>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">として下さい。</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">
<p><span style="color: #808080;">追記1：</span></p>
<p><span style="color: #808080;">開始時刻と累積時刻が二重に存在しているので上手くないですね。。</span></p>
<p><span style="color: #808080;">追記2：</span></p>
<p><span style="color: #808080;">github初めて使ったんですけど、つまらないところでひっかかっちゃいましたが、それはまた別記事にします。</span></p>
<p><span style="color: #808080;">追記3：</span></p>
<p><span style="color: #808080;">こんな程度の内容ですが、記事を書く事で改めて気づく事がありました。</span></p>
<p><span style="color: #808080;">これからも続けようと思います。</span></p>
<p><span style="color: #808080;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hi-farm.net/2009/07/07/%e3%82%bf%e3%82%a4%e3%83%9e%e3%83%bc%e8%a1%a8%e7%a4%ba/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
