Gibt es einen Unterschied zwischen einem CGRect
und einem NSRect
? Insbesondere wundere ich mich über die Position des Ursprungs. Gibt es wichtige Unterschiede, die ich wissen muss?Gibt es einen Unterschied zwischen einem CGRect und einem NSRect?
Antwort
Sie sind gleich. This link hat weitere Informationen. Kopierte hier zum schnellen Nachschlagen:
CGRect
ist die Core Graphics äquivalentNSRect
.Sie sind absichtlich so gemacht, dass sie das gleiche Layout im Speicher haben.
CGRect cgrect = *(CGRect *)&nsrect;
Core Graphics bietet auch eine
CGRectMake()
Funktion, die funktioniert genauso wieNSMakeRect()
(man beachte die Umkehrung von Verb und Objekt in dem Namen), außer es: Als solches ist es einNSRect
zu einemCGRect
, indem Sie diese konvertieren erlaubt gibt eineCGRect
zurück.
Insbesondere frage ich mich über die Position des Ursprungs.
Das hängt davon ab, wo Sie das Rect haben und wo Sie es verwenden. Im Allgemeinen verwenden Core Graphics und UIKit gespiegelte Koordinaten (Ursprung oben links, positives y geht nach unten), während AppKit nicht gespaltene Koordinaten verwendet (Ursprung links unten, positives y steigt). Es ist jedoch möglich, Koordinaten von jeder API zu spiegeln oder zu entfernen, und einige Klassen, wie NSImage und NSView, machen dies sehr einfach.
Als ich seine Frage las, dachte ich zuerst, dass er vielleicht auf das Speicherlayout Bezug nahm; h., ob der Versatz ("Position" in seiner Sprache) des ".origin" -Mitglieds (und daher natürlich auch ".size") auf beiden Strukturen gleich ist. Wie oben angedeutet, haben die beiden jedoch garantiert das gleiche Speicherlayout. –
- 1. Gibt es einen Unterschied zwischen einem Steuerelement und einem Widget?
- 2. Gibt es einen Unterschied zwischen einem Webserver und einem Webdienst?
- 3. Gibt es einen Unterschied zwischen einer Liste und einem Tupel?
- 4. Gibt es einen Unterschied zwischen einer Entität und einem Objekt?
- 5. Wie sind NSRect und CGRect inkompatible Typen?
- 6. NSRect vs CGRect: y-Achse Inversion
- 7. Gibt es einen Unterschied zwischen $ @ und "$ @"?
- 8. Gibt es einen Unterschied zwischen '=' und In?
- 9. Gibt es einen Unterschied zwischen VbNullString und ""?
- 10. Gibt es einen funktionalen Unterschied zwischen einem [,] 2d-Array und einem [] []?
- 11. Gibt es einen Unterschied zwischen den Randwerten?
- 12. Unterschied zwischen einem Objekt und einem Hash?
- 13. gibt es einen Unterschied zwischen Malloced-Arrays und neue Arrays
- 14. Gibt es einen Unterschied zwischen "center_horizontal | center_vertical" und "center"
- 15. Gibt es einen Unterschied zwischen SqlConnection.CreateCommand und neuen SqlCommand?
- 16. Gibt es einen Unterschied zwischen float: none und clear: none
- 17. Gibt es einen Unterschied zwischen RenderPartial und RenderPage?
- 18. Unterschied zwischen einem +++++ b und einem ++ + ++ b
- 19. Gibt es einen Unterschied zwischen Google Place und Google Location?
- 20. JS: Gibt es einen Unterschied zwischen class.prototype.constructor und class.constructor
- 21. Gibt es einen Unterschied zwischen diesen Anweisungen?
- 22. Gibt es einen Unterschied zwischen Sudo-Modus und Kernel-Modus?
- 23. Gibt es einen Unterschied zwischen NSString vergleichen: und isEqual (ToString) :?
- 24. Gibt es einen Unterschied zwischen "Drucken" und "Echo" in PHP?
- 25. Unterschied zwischen einem Informatiker und einem Computerprogrammierer
- 26. Gibt es einen Unterschied zwischen XSD: Pattern und C# Regex?
- 27. null und NULL, gibt es einen Unterschied?
- 28. Gibt es einen Unterschied zwischen einer SVN-Kopie und einem SVN-Zweig?
- 29. Gibt es einen Unterschied in der Verarbeitungszeit zwischen mehreren if-Anweisungen und einem wenn mehrere Bedingungen?
- 30. Gibt es einen Unterschied zwischen einem .DLL-Compiled für .Net 4 und .Net 3.0?
Nun, das ist erlaubt, außer dass es strenge Aliasing-Regeln im Compiler bricht. Ich werde diese Wiki-Seite reparieren. Verwenden Sie NSRectFromCGRect und NSRectToCGRect zum Konvertieren. – Ken
In 64-Bit, oder wenn Sie mit 'NS_BUILD_32_LIKE_64' kompilieren, wird' NSRect' als 'CGRect' definiert, so dass Sie nicht einmal durch den Zeiger-Rahmen springen müssen. –
nicht 'CGRect cgrect = (CGRect) nsrect;' das gleiche tun? – Alexander