NSRect

Crowd-sourced documentation and tutorials by the Cocoa developer community
Jump to: navigation, search

Foundation's NSRect structure, defined in NSGeometry.h.

typedef struct {

   NSPoint origin;
   NSSize size;

} NSRect;

The NSRect struct differs from QuickDraw's Rect struct in two important ways:


  • The NSRect struct is a rectangle defined by an origin expressed as coordinates and by its height and width. QuickDraw's Rect defines all four sides of its rectangle as coordinates. Having used both systems for a while I do find the origin/size strategy a little more convenient than the four-coordinates strategy -- but one can convert between the two with ease.
  • The elements of NSRect (origin.x, origin.y, size.width, size.height) are all float types. QuickDraw's Rect coordinates are all integer numbers. Rect was designed in a time when integer math was vastly faster and addressing individual pixels was all that could be done, whereas Cocoa and CoreGraphics work in a resolution-independent space with the ability to address the areas between pixels.


NSGeometry.h defines a number of helper functions for working with NSRect structs. Some commonly used functions include:

NSStringFromRect is most handy when used in conjunction with NSLog for printing debug messages:

NSLog(@"frameRect = %@", NSStringFromRect(frameRect));

Note that unlike Carbon API all of these API pass the entire structure on the stack. In Carbon, one typically passes the address of a Rect around. Don't let that trip you up.

Foundation also defines the global variable:

NSZeroRect

Which is occasionally useful when performing set arithmetic with the aforementioned functions and the like.


Discussion

I cleaned up the page a bit to incorporate the bit about "Carbon's Rect" being incorrect or ambiguous. I also reworked the part that talked about how Rect was faster because it used ints, since integer math hasn't been faster than floating point math for well over a decade.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox