Is there any difference between a CGRect and an NSRect?
Is there any difference between a CGRect
and an NSRect
? In particular, I'm wond开发者_JAVA百科ering about the position of the origin. Are there any important differences I need to know about?
They're the same. This link has more information. Copied here for quick reference:
CGRect
is the CoreGraphics equivalent ofNSRect
.They are deliberately made to have the same layout in memory. As such, it is allowed to convert an
NSRect
to aCGRect
by doing this:CGRect cgrect = *(CGRect *)&nsrect;
CoreGraphics also provides a
CGRectMake()
function which works the same asNSMakeRect()
(note the reversal of verb and object in the names) except it returns aCGRect
.
In particular, I'm wondering about the position of the origin.
That depends on where you got the rect and where you're using it. In general, Core Graphics and UIKit use flipped co-ordinates (origin upper-left, positive y going down), whereas AppKit uses unflipped co-ordinates (origin lower-left, positive y going up). But it is possible to flip or unflip co-ordinates from each API, and some classes, such as NSImage and NSView, make it very easy to do so.
精彩评论