iPhone内の各種要素の定数に関するメモ
半透明ステータスバーの透明度は多分 0.6
キーボードのアニメーション速度は0.3秒
UITextViewのマージンは8ピクセル。
現在のところ、UITextViewのマージンを(普通に)設定する方法は無いらしい。
半透明ステータスバーの透明度は多分 0.6
キーボードのアニメーション速度は0.3秒
UITextViewのマージンは8ピクセル。
現在のところ、UITextViewのマージンを(普通に)設定する方法は無いらしい。
iPhoneのキーボードが出現するときには、slide up のアニメーションがかかりますが、このアニメーションの開始から完了までの時間間隔は、0.3秒のようです。消える時のアニメーションも同様のようです。
ドキュメントを調べても取得するAPIがわからなかったのですが、
UICatalogのサンプルアプリケーションの中で、定数が定義されていました。
キーボードの寸法については、NotificationのuserInfoの中の値から調べられます。
iPhoneのツールバー(UIToolbar)の高さを取得する方法のメモです。
objective-c>>
何かどこかに定数定義とかがあるかもしれないですが、
とりあえず sizeToFit すればあるべき高さに収まるようです。
UIStatusBarでも同様ですね。
昨日のRails勉強会でMaihaさん、Yuguiさんと話してましたが、
PayPalが日本円でのマイクロペイメントサービスを開始したようです。
米eBay傘下の決済サービス大手PayPalは22日、少額決済を行える、いわゆる「マイクロペイメント」サービスを拡大したと発表した。米国だけでなく、日本円など19通貨にも対応した。
この業界でB2Cサービスを展開してる会社にとっては、結構大きな出来事じゃないでしょうか。
See Also
Railsのacts_as_searchableプラグインに類似検索機能をつけた
acts_as_searchable_with_similarityを、GitHubに移管いたしました。
http://github.com/genki/acts_as_searchable_with_similarity/tree/master
今後はこちらをお使いいただけるとありがたいです。
中川さん(aka Psychs)
がiPhone用の画像ダウンロードライブラリ
「ImageStore」
をGitHub上で公開されたようです。
iPhone 用の画像ダウンロードライブラリ、ImageStore のソースコードを公開します。
http://github.com/psychs/imagestore/tree/master
ライセンスは、New BSD ライセンスです。
Thanks!
CoreGraphics
を使った角丸長方形(RoundRect)
を描画するためのメソッドです。
objective-c>>
(void)
drawRoundRect:(CGRect)rect
withRadius:(CGFloat)radius
inContext:(CGContextRef)context
{
CGFloat lx = CGRectGetMinX(rect);
CGFloat cx = CGRectGetMidX(rect);
CGFloat rx = CGRectGetMaxX(rect);
CGFloat by = CGRectGetMinY(rect);
CGFloat cy = CGRectGetMidY(rect);
CGFloat ty = CGRectGetMaxY(rect);
CGContextMoveToPoint(context, lx, cy);
CGContextAddArcToPoint(context, lx, by, cx, by, radius);
CGContextAddArcToPoint(context, rx, by, rx, cy, radius);
CGContextAddArcToPoint(context, rx, ty, cx, ty, radius);
CGContextAddArcToPoint(context, lx, ty, lx, cy, radius);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);
}
<<--
角丸が好きなので多用しそうな気がします。
事前にStrokeやFillの色を設定してお使いください。
gitを使っていて、間違ったファイルをgit addしてしまった場合に、
これをキャンセルする為には、以下のコマンドが使えます。
pre>>
% git rm --cached
<<--
git rmは、Working Tree (作業コピー)と
index からファイルを削除するコマンドですが、--cachedを指定する事で、
indexからのみファイルを削除する事ができます。
git addはWorking Treeからindexにファイルを追加するコマンドなので、git rm --cachedは、git addと対をなすコマンドだと言えますね。
Sqlite3を使っている場合に、テーブルが存在するかどうかを確認する為には、
以下のようなSQLを実行すればOkです。
sql>>
SELECT count(*) FROM sqlite_master
WHERE type='table' AND name=?;
<<--
?には、sqlite3_bind_textなどで存在を確認したいテーブルの名前をbindします。
あとは結果をsqlite3_column_intなどで取得すればOkです。
See Also
Xcodeでgdbを使ってObjective-Cのコードをデバッグしているときに、
Objective-Cのメソッドを呼んだ結果が知りたい場合、
以下のようにすれば良いようです。
objective-c>>
(gdb) call (int) [@"a" length]
$1 = 1
<<--
C関数の形式で以下のように呼び出してもOkです。
objective-c>>
(gdb) call (int) objc_msgSend(@"ab", @selector(length))
$2 = 2
<<--
ただし、戻り値のサイズや型によっては、objc_msgSend
ではなく、objc_msgSend_stretなどを使う必要があります。
時々忘れるのでメモ。
|
|
|引数の数,英語(A),英語(B)
|
|0,constant function,==
|1,unary function,monadic function
|2,binary function,dyadic function
|3,ternary(trinary) function,triadic function
|4,quaternary function,tetoradic function
|不定/可変,multinary function,variadic function
5つ以上の場合は、
quinary, senary, septenary, octonary, nonary, denary, undenary, duodenaryなどと続きます。
Objective-Cで、Method構造体からCレベルの関数ポインタを取得する方法のメモです。
以前は、
objective-c>>
Method *method = class_getInstanceMethod(class, selector);
IMP imp = method->method_imp;
<<--
という感じで取得出来ていたみたいですが、現在はDeprecatedとなっており、
以下のようにする必要があるようです。
objective-c>>
IMP imp = method_getImplementation(method);
<<--
Objective-Cで、クラスやプロトコルを前方宣言(前方参照とも呼ばれたりします)をする方法のメモです。
クラスの前方宣言
クラスを前方宣言する場合は、@classに続いてクラス名、セミコロンを書きます。
objective-c>>
@class Foo;
<<--
プロトコルの前方宣言
クラスのときと同様、プロトコル名のあとにセミコロンでOk。
objective-c>>
@protocol Foo;
<<--
Objective-Cでオブジェクトを初期化する処理は、-init
メソッドなどの初期化メソッドで実装されます。
よく見かけるのはこんな例ですね。
objective-c>>
しかしながら、基底クラスの初期化処理[super init]の最中に、
メモリアロケーションの失敗などによって正常に初期化が行われなかった場合に備えて、次のようなエラーハンドリングを行った方が良いでしょう。
objective-c>>
この辺の処理はXcodeなどが生成するひな形にも書かれていますね。
さて、ここからが本題ですが、上述の/* initialization code */
の中で初期化が失敗したときは、どうしたら良いでしょうか。
仕様的には、初期化に失敗したら nil を返す必要がありますが、
その際、途中までの段階で確保したリソースを解放する必要があるでしょう。
つまり、[super init]の中で確保されたであろうリソースを解放する必要があります。
objective-c>>
ということで、こんな感じに[super dealloc]
を呼び出して nil を返します。
ここで、[super release] を呼び出すと、
参照カウンタが0になり、 [self dealloc]
が呼び出されてしまうので注意が必要です。[self dealloc]を呼び出すようにする場合は、上述の/* release all resources */
の中でリソースを解放せずに、[self dealloc]
の中で解放するようにする必要があります。
しかし、失敗した初期化処理の中で中途半端に確保したリソースを、
正しく解放する為には、[self init]
の内部で解放処理まで行った方が楽な気がします。
あるいは、以下の様に初期化済みのものだけ解放するようなコードを[self dealloc]に書いておくという手もあるかもしれません。
objective-c>>
#define RELEASE(x) if(x) [(x) release]
こんなコードを見ると、なんだかノスタルジーを感じます。
ちなみに関係ないですが、このブログシステムでは、
Objective-Cのソースコードを以下のような記法でSyntax highlightさせる事ができます。
pre>>
objective-c>>
/* Objective-C code */
<<objective-c
<<pre
久々にRailsプラグインの紹介です。
This is not simple hack of named scope like you might find in WillPaginate. This is a fully backported and tested version of NamedScope that will work on rails 1.2.6 or 2.0.4.
Rails-2.0.4およびRails-1.2.6でNamedScopeが使えるようになるようです。
~/.gitconfigをさらしてみます。[user]は省略。
pre>>
[color]
status = auto
diff = auto
[alias]
co = checkout
ci = commit -a
st = status
up = pull --rebase
<<--
こんな感じ。SVNぽい感じで使えるようにサブコマンドのaliasを設定してます。
色づけはautoで。
いろいろ調べた事をブログに書けなくて、
フラストレーションがたまっていたのですが、
ついにソースコードの開示や解説などが解禁されたようですね。
NDA契約更新が完了次第、iPhoneアプリ開発についても
ブログに書いていこうと思います。
今まで通りRailsアプリ開発の話も書いていきます。
See Also