2012年3月14日水曜日

CGPointMake や CGSizeMake のショートカット

目からウロコ。


例えば
CGSize size = CGSizeMake(100, 200);
と書いていたのを
CGSize size = {100, 200};
と書ける。

他に
CGPoint p = {100, 200};
CGRect r = {0, 0, 100, 200};
など。これは C言語で標準にサポートされている構造体の初期化の書き方。

CGSizeは普通に構造体なのでこんな書き方ができる。
struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct CGSize CGSize;

レイヤーのプロパティに代入する場合などにはキャストが必要になる。
layer.shadowOffset = (CGSize){100, 200};

ちなみに CGSizeMake はこんなマクロ定義。
CG_INLINE CGSize
CGSizeMake(CGFloat width, CGFloat height)
{
  CGSize size; size.width = width; size.height = height; return size;
}

- - - -
将来 CGSizeの仕様が変わる可能性がまったく無いという訳ではないのでプロダクトベースでは従来通り CGSizeMakeを使うべきだろう(まあ構造が変更される可能性は限りなく低いと思うが)。

検証コードなどその場限りのコードを書くときには便利。

0 件のコメント:

コメントを投稿