カテゴリー : 2013年 4月

CGRectGetMinXと、rect.origin.x


きょうのはまりポイント

矩形であるCGRectの座標を取得するために、CGRectGetMinXっていう関数がある。CGRectの左端座標を取得するもの。これは、rect.origin.xを直接取得するのとは違うのか?

答え:違う。CGRectGetMinXは、CGRectの幅が負のときも考慮される。

rect = {{0, 0}, {100, 100}}の場合、
CGRectGetMinXは、0。rect.origin.xも、0。

それに対して、rect = {{0, 0}, {-100, 100}}の場合、
CGRectGetMinXは、-100。rect.origin.xは、0。

はまったのは、rect.size.widthを初期化していないCGRectに対して、CGRectGetMinXを呼んでいたとき。rectの幅を決定するのに、左端の座標を使っていた。これを、CGRectGetMinXで取得すると、rectが不定だったので、意図しない値が返ってくるときがあった。避けるには、widthを初期化するか、rect.origin.xを直接取得する。

はまったー。Analyzeかけると警告が出るから、変だなとは思ってたんだよ。まさか、負の幅もちゃんと考慮してくれているとは。っていうことは、CGRectGetMinXを使うと、rect.origin.xの直接参照より、ちょびっとだけパフォーマンスは落ちるんだな。