24/7 twenty-four seven

iOS/OS X application programing topics.

Objective-C

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…

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件とかを 読み込んでおいて、もっと見たい場合は一番下のセルの 「ほかの??件を読み込む」 とか 「次の??件…」 ってのを押すとインジケーターがぐるぐる回って そこにセルがインサートされるみたいな…

iPhoneアプリケーションで圏外を通知する。

ネットを利用するiPhoneアプリケーションは、圏外の通知が必須に? - 24/7 twenty-four seven上記の記事で書いたように、現在、ネットを使用するアプリケーションは、ネットワークに接続できないときには、何らかの形でユーザーに知らせないといけないので、…

autoreleaseされたオブジェクトはいつ解放されるか

http://mtl.recruit.co.jp/blog/2009/01/iphoneiphonesdk.html つまり、デフォルトでは、autoreleaseされたインスタンスは、このプールにどんどん、追加されてゆく。ちょっとした文字列であっても NSString.stringWithFormatを乱発すると、メモリ不足になり…

GoogleのObjective-Cコーディング規約

C++などと同様に、Googleで使われているObjective-Cのコーディング規約があるんですね。Google Objective-C Style Guide Google Objective-Cスタイルガイド 日本語訳 | textdrop あわせて読みたい AppleのCocoaコーディングガイドライン

iPhoneのタッチイベントで、シングルタップを無視してダブルタップのイベントだけ拾う方法。

iPhoneの画面でシングルタップとダブルタップで全く別の動作をさせたいときや、ダブルタップにだけ反応して、シングルタップは無視したいようなときがあります。 しかし、単純にtapCountによって処理を分けようとすると、"[touch tapCount] == 2"の処理の前…

iPhoneアプリケーション「はてな touch」「LDR touch」「テレビ番組表」のソースを公開しました。

今まで作ったアプリケーションのソースコードをGitHubで公開しました。kishikawakatsumi (kishikawa katsumi) · GitHub はてな touch / Hatena touch - GitHub LDR touch - GitHub テレビ番組表 / TV Listings - GitHub

UICCalendarPickerの使い方

基本形 UICCalendarPicker *calendarPicker = [[UICCalendarPicker alloc] initWithSize:UICCalendarPickerSizeMedium]; [calendarPicker setDelegate:self]; [calendarPicker setSelectionMode:UICCalendarPickerSelectionModeMultiSelection]; [calendarPi…

iPhone用日付選択UIライブラリ、UICCalendarPickerを作りました。

UIDatePickerよりも簡単に日付を選択できるようにしたいと思って作りました。 予定を入力するような場面などで、活用できると思います。 GitHubのUICoderzのグループで公開しています。 アプリケーションに組み込んだり、自由に使ってください。 テレビ番組…

iPhoneデバッグ用のマクロで、クラス名とメソッド名を自動的にログ出力する

iPhone デバッグ用のマクロ - Windchase #ifdef DEBUG # define LOG(...) NSLog(__VA_ARGS__) # define LOG_CURRENT_METHOD NSLog(NSStringFromSelector(_cmd)) #else # define LOG(...) ; # define LOG_CURRENT_METHOD ; #endif iPhone デバッグ用のマクロ …

UITabBarController + UINavigationController + UITableViewという画面構成のときに、次の画面でタブバーを消すようにしていると、前の画面に戻ってきたとき、テーブルの一番下が隠れる。

言葉だけでは分かりにくいので、テレビ番組表の画面で説明します。 一覧画面はタブバー + テーブルビュー (UITabBarController + UITableView) という構成になっています。 一番下の列をタップして、次の画面に移動します(Web画面)。 異動先の画面ではタブ…

日本語環境では、NSDateFormatterでフォーマットした日付がおかしい

書式文字列の仕様は以下の通りです。 h Hour [1-12] H Hour [0-23] K Hour [0-11] k Hour [1-24] UTS #35: Locale Data Markup Language それでこんなコードで実験してみると・・・ NSDate *now = [[NSDate date] retain]; NSDateFormatter *dateFormatter =…

iPhoneの自動ロック(自動スリープ)を無効にする

UIApplicationクラスのidleTimerDisabledプロパティにYESをセットする。 - (void)applicationDidFinishLaunching:(UIApplication *)application { [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; [window addSubview:landscapeClockViewCon…

UIImageViewを使って画像を回転

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; if (UIDeviceOrientationIsLandscape(orientation)) { [landscapeClockView setCenter:CGPointMake(160.0, 240.0)]; if (orientation == UIDeviceOrientationLandscapeLeft) { […

iPhoneアプリで正規表現を使う

RegexKit Framework上記のサイトからRegexKitLiteをダウンロードします。RegexKitLite-2.2.tar.bz2を展開すると、以下のようになります。 RegexKitLite.h RegexKitLite.m RegexKitLite.html examples RKLMatchEnumerator.h RKLMatchEnumerator.m NSString-He…

iPhoneで繰り返しループするサウンドを鳴らすコードのメモ (Audio Queueのサンプル)

iDevGames Forums 使い方 GBMusicTrack *song = [[GBMusicTrack alloc] initWithPath:[[NSBundle mainBundle] pathForResource:@"BackgroundMusic" ofType:@"mp3"]]; [song setRepeat:YES]; [song play]; GBMusicTrack.h // // GBMusicTrack.h // GameBase /…

iPhoneを振る動作を検出するコードのメモ

ios - How do I detect when someone shakes an iPhone? - Stack Overflow // Ensures the shake is strong enough on at least two axes before declaring it a shake. // "Strong enough" means "greater than a client-supplied threshold" in G's. stati…

Interface BuilderでカスタムUITableVIewCellを作るときの注意点

Interface Builderを使ってカスタマイズしたUITableViewCellを作る方法(追記あり) - 24/7 twenty-four seven前に書いた手順は長くて、自分でも見逃しがあったので、よくある間違いをまとめておきます。 XIBファイルのUITableVIewCellを使用するときによく…

Interface Builderを使ってカスタマイズしたUITableViewCellを作る方法(追記あり)

[追記]大事な手順を書き忘れていました。セルの再利用のための手順を最後に追記しています。 間違ってるかもしれないけど、たぶんこう。 View Templateを選択して、新しいXIBファイルを作成します。 もともとのViewを削除します。 代わりにUITableViewCellを…