2011/12/13

Twitterのように経過時間を取得する

Twitterのように投稿時刻から現在までの経過時間を表示したい場合はNSDateのtimeIntervalSinceNowメソッドを使うとよい。NSTimeIntervalはdouble型である。

NSDate *start = [NSDate date];
NSTimeInterval timeInterval = [start timeIntervalSinceNow];
// 経過時間を秒数で表示。ミリセカンド単位まで測ってくれる模様。
NSLog(@"%f秒前", -timeInterval);
// 経過時間を単位時間数で表示。doubleからint型にしている。
NSLog(@"%i時間前", (int)-timeInterval/3600);

2011/11/30

iOSのTwitterフレームワークでツイートするには?

iOS5になってからTwitterがネイティブでサポートされるようになったことはご存知の通りである。以下はアプリ内からツイートするためのサンプルコードである。


コードはこちらのサイトのものを拝借している。

画像をフェードインさせる

画像をすっとフェードインさせたいときはView Animationを使うのが手軽でよい。

imageView.alpha = 0; 
[UIView beginAnimations:@"fadeIn" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration:0.3];
imageView.alpha = 1; 
[UIView commitAnimations]; 

 例えば非同期で画像をロードして表示する場合、突然絵が現れるのは無骨だが、フェードインさせると眼にやさしいというか見栄えがよかったりする。

UIActivityIndicatorViewのくるくる画像の非同期ロードと組み合わせるのがグッド◎

2011/11/29

NSNotification - 通知センターの使い方

iOSにおいて通知センターは、イベントの登録とイベントハンドラの指定を担うものである。もちろんnotificationの種類にはもともと用意されているものも多くあり、これはJavascriptにおけるイベントのonMouseOverなどに似ている。
NSNotificationは異なるオブジェクト間でコミュニケーションをとりたいときに役立つ。
以下のコードはNSNotificationCenterの使用例である。


この例で言うと、receiveTestNotificationメソッドがJavascriptのイベント発生後に実行されるコールバック関数に似ている。

サンプルコードはこちらを参考に掲載。

iPod Nanoを腕時計に!

iPod Nanoを腕時計にしてくれるtiktok, lunatikがかっこよさそう。
シルバー、ブラックをはじめ、赤・青・黄などのカラーラインアップがある模様。



Kickstarterという資金調達支援サービスを通じて$943,000以上も集めて話題になったとか。この手があったか!と思い知らされる有名プロジェクトの産物だ。
アップルの洗練されたデザインをうまく活かした素敵なプロダクトである。

強いて言えばiPod Nanoにbluetoothステレオが内蔵で欲しいところ。とはいえ、小型bluetooth対応のトランスミッタを装着すればワイヤレスで音楽再生が可能である。

http://lunatik.com/


iOS5で画像を非同期ロードして表示するには?

iOS5になってからは自動メモリ管理(automatic reference counting)やNSURLConnectionのデリゲート仕様の変更などにより、従来のコードでは画像をうまく非同期ロードできない場合がある。

そんなときは次のNSURLConnectionのクラスメソッドを実装すればよい。

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

iOS5でもかつてのNSURLConnectionデリゲートメソッド(現在はNSURLConnectionData protocolのものか)によって非同期通信が実現できないわけではないらしいが、マルチスレッドでアプリを動かす場合には注意が必要とのこと。いずれにしても今後はsendAsynchronousRequestを利用した方がベターということであろうか。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection



iOS4.3以前であれば、次のようなライブラリがあり、かつてはよく使用されていたと思われる。

AsyncImageView
UIImageViewを継承したクラスライブラリ。
非同期通信で画像をロードし、UIが固まるのを防いでくれる。

ASIHTTPRequest
CFNetwork APIのラッパーで非同期通信をラクにするライブラリ。

画像とかロードしてるときのくるくる

UIActivityIndicatorViewを使うのが一般的。

    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(135,30,50,50)];
    [spinner startAnimating];
    [self.view addSubview:spinner];
    //いろいろたのしいことしませふ
    [spinner stopAnimating];

デフォルトの設定ではstopAnimatingをした段階でくるくるは非表示になる。
これはUIActivityIndicatorViewhidesWhenStoppedというプロパティのデフォルト値がYESになっているためである。