24/7 twenty-four seven

iOS/OS X application programing topics.

Cocoa

Tweetie 2 のリフレッシュUIサンプル

A similar control to the pull down to refresh control created by atebits in Tweetie 2. enormego/EGOTableViewPullRefresh · GitHub

libxml2 をリンクしていて、iPhone SDK 3.x でビルド、Deployment Target を iPhone OS 2.x に設定しているとき、OS 2.x の環境で実行するとクラッシュする場合の対処

iPhone SDK 3.x で libxml2 を使うプロジェクトを Deployment Target を iPhone OS 2.x に設定してビルドしたとき、OS 2.x の環境で実行すると、libxml2 のリンクに失敗します。 dyld: Library not loaded: /usr/lib/libxml2.2.dylib Referenced from: /var/…

UITabBarControllerを自動回転に対応させる (2)

UITabBarControllerを自動回転に対応させる - 24/7 twenty-four seven以前UITabBarControllerを継承する方法を書きましたが、各タブの全てのUIViewControllerがshouldAutorotateToInterfaceOrientation:メソッドでYESを返せば回転するようです。 例えば、上…

iPhone 3Gと3GSやiPod touchの世代を判別する方法 (2)

iPhone 3Gと3GSやiPod touchの世代を判別する方法 - 24/7 twenty-four seven以前にiPhoneやiPod touchのモデルを区別する方法として、sysctlbyname()関数を使う方法を紹介しましたが、モデル番号だけならuname()を使う方が簡単でした。 #import <sys/utsname.h> - (void)app</sys/utsname.h>…

UILabelに影をつける

UILabelに影をつけるには通常、shadowColorプロパティとshadowOffsetプロパティを設定します。 暗めの背景色で、shadowColorを白、shadowOffsetを下に1ピクセルずらすと、立体感のあるラベルになります。 label.shadowColor = [UIColor whiteColor]; label.s…

スクロール(ドラッグ)中でもタイマーを止めない方法

NSTimerのカウントがUIScrollViewのドラッグ中に止まってしまうのが困る場合は次のようにします。 NSTimer *timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(onUpdate:) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoo…

iPhone 3Gと3GSやiPod touchの世代を判別する方法

UIDevice の model プロパティでは iPhone や iPod touch など、おおざっぱな区別しかできません。 3G か 3GS かの違いを識別するにはライブラリ関数 sysctlbyname() を使います。 sysctlbyname(3) Mac OS X Manual Pagesysctl() はシステムの様々な情報を取…

NSObject:description メソッドを簡単に実装できる DescriptionBuilder を公開しました。

kishikawakatsumi/DescriptionBuilder · GitHubNSObject クラスの description メソッドをオーバーライドしておくと、NSLog で出力できたりしてデバッグ時に便利です。 ただ、出力する項目が増えてくると、結構な手間になるので、リフレクションを使って自動…

MapKitでルート案内をするライブラリを公開しました。

MapKitフレームワーク単体では、標準のマップアプリのようなナビは作れないのですが、Google Maps APIと組み合わせることで、似たような機能を実現してみました。 GitHubのリポジトリで公開しています。 kishikawakatsumi/MapKit-Route-Directions · GitHub …

文字列の両端の空白を除去(Trim)する

[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

UIWebViewでBASIC認証のあるページにアクセスする方法

ブラウザアプリのAppStoreレビューでちょくちょく言及されているので調べてみました。 Undocumented APIを使用するので、審査に通るかは微妙です。 そもそもBASIC認証くらいなら、 http://user:password@www.example.com/というURLでアクセスすれば認証でき…

UIImage#imageNamed:は読み込みも描画もUIImage#imageWithContentsOfFile:やそれ以外のメソッドより5〜6倍速い

とあるアプリで大量に画像を使うのでキャッシュしない画像のロードをいろいろ試していたのだけど。 imageNamed:は圧倒的にロードが速いし、何故か描画も速い。下記にあるように、UIImage#imageNamed:はクラッシュするまで画像をキャッシュし続けるみたいなの…

iPhoneの回転をshouldAutorotateToInterfaceOrientation:以外の方法で検知する。

http://iphone.longearth.net/2009/05/10/os30%E3%81%AEshouldautorotateto-interfaceorientation%E3%81%8C%E3%81%8A%E3%81%8B%E3%81%97%E3%81%84%E4%BB%B6 iPhone OS 3.0 - Breaking changes to shouldAutorotateToInterfaceOrientation | blog.sallarp.com…

アスペクト比(縦横比)を保ったまま、画像を拡大縮小する。

iphone - How to scale a UIImageView proportionally? - Stack Overflow @interface UIImage (Extras) - (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize; @end; @implementation UIImage (Extras) - (UIImage *)imageByScalingProporti…

CATiledLayerとUIScrollViewを使って、超巨大な画像を表示するサンプル

(参考) 無為空間 |タイルビューの挙動確認用サンプル CATiledLayerとUIScrollViewを組み合わせて、巨大な画像をスムーズにスクロールして表示するサンプルです。 表示する画像はこちらを使用しました。Garden | photo page - everystockphoto 画像の大きさは…

XIBファイルをObjective-Cのソースコードに変換するツール

nib2objc akosma/nib2objc · GitHub以下のように、パラメータにXIBファイルを指定すると、標準出力にコードが出力されます。 $ nib2objc WebView.xib > WebView.mこのようなビューから下記のコードが出力されます。 XIBファイルをソースコードに変換する場合…

NSDateFormatterはフォーマットする前にロケールを設定すべき?

日本語環境では、NSDateFormatterでフォーマットした日付がおかしい - 24/7 twenty-four seven前に日本語環境ではフォーマットした時刻の表記に「午前・午後」が含まれてしまって使いにくいと書いたのですが、コメントにて、フォーマットする前にロケール(NS…

マスクを使って画像を切り抜く

How to Mask an Image [iOS developer:tips]; 白黒の画像をマスクとして、画像を任意の形に切り抜くことが出来ます。 上記の例はとても単純ですが、マスク画像を工夫すれば、複雑な形の画像もプログラムから簡単に作成できます。 //元画像 UIImage *iconImag…

UIWebViewのタップ&ホールドで表示される「アクション」ポップアップを抑制する

LDR touchのエントリー画面のように、UIWebViewを、ブラウザとしてではなく、HTMLのビューアとして使ってるような場合は、このポップアップはあまり意味が無いので、出したくないときがあります。 これは以下のようなスタイルを指定すれば、抑制できます。 -…

UIApplicationを継承して、いろいろなイベントを受け取る

UIApplicationを継承すると、アプリケーションで発生するいろいろなイベントが受け取れます。継承した独自のUIApplicationクラスを使用するには、Other Sourcesにある、main.mを以下のように書き換えます。 int main(int argc, char *argv[]) { NSAutoreleas…

UITextFieldのテキストをインデントする

UITextFieldの文字の入力位置を調整する方法です。UITextFieldを継承したクラスを作り、次のメソッドをオーバーライドします。 - (CGRect)textRectForBounds:(CGRect)bounds; - (CGRect)editingRectForBounds:(CGRect)bounds; textRectForBounds:が返す値は…

UITabBarControllerを自動回転に対応させる

UIViewControllerと同じで、継承してshouldAutorotateToInterfaceOrientation:でYESを返します。 #import <UIKit/UIKit.h> @interface MyTabBarController : UITabBarController @end #import "MyTabBarController.h" @implementation MyTabBarController - (BOOL)shouldAut</uikit/uikit.h>…

iPhoneで1024ピクセル以上の巨大な画像を表示するビュー

http://kuon.goyman.com/2009/01/22/iphone-large-image-viewer/UIImageおよびUIImageViewは、1024x1024を超える大きさの画像を取り扱えません。このGYImageViewは、スクリーンに表示される部分だけ高解像度で表示するという方法で、巨大な画像でもメモリを…

UIWebViewのUser-Agentを変更する。

Yahoo! JAPANをはじめ、Safariで見るとiPhone用のページが表示されるのに、UIWebViewに表示する場合はPC用のページが表示されてしまうサイトがあります。 このようなサイトは、たいていブラウザのUser-Agentによって、表示するページを切り替えています。 UI…

サンプルコードが満載の海外のiPhone開発系ブログ

id:fladdictさんが、質問していたので回答しました。総額1万ポイントで質問です。 海外のiPhone開発系ブログのうち、… - 人力検索はてな Cocoa with Love Cocoa with Loveというサイトです。 英語ですが、スクリーンショットやソースコードが充実しているの…

NSAutoreleasePoolの動作について

3つめのコードがちょっと違います。 でもって本題ですが、Objective-CにはretainCountって物があって、それが0になると解放されるみたいです。(未だに良く理解してない) そしてretainCountはalloc, init, retainなどで増えて、releaseで減るみたいです。だ…

タイムゾーンを指定して、時間帯に応じた日時を取得する。

NSDateFormatterにタイムゾーンを指定して取り出します。 例えば以下のようにすると、どこの国で使用しても日本時間になります。 NSDate *now = [NSDate date]; NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter set…

UITableViewControllerを使わないでテーブルビューを使うとき実装すべきメソッド

テーブルビューを使う場合に審査で気をつけること - 24/7 twenty-four seven 上記の記事で書いたように、テーブルビューの見た目でリジェクトされないように、コントローラにUITableViewControllerを使わない場合は、行の選択解除などをやってくれないので、…

UIKitはスレッドセーフではない

All UIKit objects should be used on the main thread only. http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/chapter_4_section_6.html#//apple_ref/doc/uid/TP40002974-CH5-SW47 別のスレッ…

UITableViewでページング処理をする。

App Storeとかであるんだけど、UITableViewの最初の20件とかを 読み込んでおいて、もっと見たい場合は一番下のセルの 「ほかの??件を読み込む」 とか 「次の??件…」 ってのを押すとインジケーターがぐるぐる回って そこにセルがインサートされるみたいな…