Skip to content

UIEdgeInsets

2011.02.20

UIKit では、Mac 用フレームワーク AppKit にはなかった構造体、UIEdgeInsets が登場しました。いろいろな場面で便利に使える構造体で、実際に UIKit の中でもよく使われています。

今回は、UIEdgeInsets を紹介します。

Pink View and Gray View


UIEdgeInsets は、マージンを表す構造体です。上下左右のマージンを表す4つのフィールドを持っています。

typedef struct UIEdgeInsets {
    CGFloat top, left, bottom, right;
} UIEdgeInsets;

下図のピンクのビューは w100 × h100 のビューですが、top: 10, left: 20, bottom: 30, right: 40 の UIEdgeInsets を適用した矩形は、その中の半透明なグレーのビューが表す矩形になります。
insetted gray view

UIEdgeInsets は、UIEdgeInsetsMake() 関数で作成します。

UIEdgeInsets insets;
insets = UIEdgeInsetsMake(10.0f, 20.0f, 30.0f, 40.0f);

UIEdgeInsets が適用された矩形を得るには、ベースとなる矩形を引数に、UIEdgeInsetsInsetRect() 関数を使用します。
半透明なグレーのビューはピンクのビューと同階層にあるビューですが、このグレーのビューの frame は以下のようにして計算しました。

CGRect grayViewRect;
grayViewRect = UIEdgeInsetsInsetRect(_pinkView.frame, insets);
_grayView.frame = grayViewRect;

UIEdgeInsets のそれぞれのフィールドは、負の値でも構いません。この場合、「ある矩形からどれだけ拡張するか」を表すことになります。top: -10, left: -20, bottom: -30, right: -40 の UIEdgeInsets から grayViewRect を計算すると、下図のようになります。
expanded gray view

UIEdgeInsetsZero という定数も用意されています。これは top, left, bottom, right すべてが 0 の UIEdgeInsets になります。

UIEdgeInsets のログを取るときは、NSStringFromUIEdgeInsets() 関数が使えます。

NSLog(@"UIEdgeInsetsZero = %@", NSStringFromUIEdgeInsets(UIEdgeInsetsZero));
// UIEdgeInsetsZero = {0, 0, 0, 0}

次回から、UIEdgeInsets を使った Tips をいくつか紹介していきたいと思います。

From → Develop

Leave a comment