¿Hay alguna diferencia entre CGRect
y NSRect
? En particular, me pregunto acerca de la posición del origen. ¿Hay alguna diferencia importante que deba conocer?¿Hay alguna diferencia entre un CGRect y un NSRect?
Respuesta
Son lo mismo. This link tiene más información. Copiado aquí por referencia rápida:
CGRect
es el equivalente de CoreGraphicsNSRect
.Están hechas deliberadamente para tener el mismo diseño en la memoria. Como tal, se le permite convertir un
NSRect
a unCGRect
al hacer esto:CGRect cgrect = *(CGRect *)&nsrect;
CoreGraphics también proporciona una función
CGRectMake()
la que funciona igual queNSMakeRect()
(tenga en cuenta la inversión del verbo y objeto en los nombres), excepto que devuelve unCGRect
.
En particular, me pregunto acerca de la posición del origen.
Eso depende de dónde hayas llegado y dónde lo estés usando. En general, Core Graphics y UIKit usan coordenadas volteadas (origen superior izquierdo, positivo y decreciente), mientras que AppKit usa coordenadas no desplegadas (origen inferior izquierdo, positivo y ascendente). Pero es posible voltear o desajustar las coordenadas de cada API, y algunas clases, como NSImage y NSView, hacen que sea muy fácil hacerlo.
Cuando leí su pregunta, primero pensé que tal vez estaba refiriéndose al diseño de la memoria; es decir, si el desplazamiento ("posición", en su idioma) del miembro '.origin' (y por lo tanto,' .size' también, por supuesto) es el mismo en ambas estructuras. Como alguien señaló anteriormente, sin embargo, se garantiza que los dos tienen el mismo diseño de memoria. –
- 1. ¿Cómo es que NSRect y CGRect son tipos incompatibles?
- 2. ¿Hay alguna diferencia entre un control y un widget?
- 3. ¿Hay alguna diferencia entre un GUID y un UUID?
- 4. ¿Hay alguna diferencia entre una entidad y un objeto?
- 5. ¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?
- 6. ¿Hay alguna diferencia entre UITableViewCellAccessoryDetailDisclosureButton y UITableViewCellAccessoryDisclosureIndicator
- 7. ¿Hay alguna diferencia entre MsgBox y MessageBox.Show?
- 8. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 9. ¿Hay alguna diferencia entre CPython y Python
- 10. ¿Hay alguna diferencia entre `ListView.invalidateViews()` y 'Adapter.notifyDataSetChanged()'?
- 11. ¿Hay alguna diferencia entre DataTable.Clear y DataTable.Rows.Clear?
- 12. ¿Hay alguna diferencia entre log4net.Config.BasicConfigurator.Configure() y log4net.Config.XmlConfigurator.Configure()?
- 13. ¿Hay alguna diferencia entre! == y! = En PHP?
- 14. ¿Hay alguna diferencia entre: window.localStorage y localStorage?
- 15. ¿Hay alguna diferencia entre .NET y ASP.NET
- 16. ¿Hay alguna diferencia entre is_int() y ctype_digit()?
- 17. ¿Hay alguna diferencia entre gluLookAt() y glFrustum()?
- 18. ¿Hay alguna diferencia entre readonly y {get; }
- 19. ¿Hay alguna diferencia entre (local), '.' y localhost?
- 20. ¿Hay alguna diferencia entre un servidor web y un servicio web?
- 21. ¿Hay alguna diferencia entre SqlConnection.CreateCommand y el nuevo SqlCommand?
- 22. ¿Hay alguna diferencia entre delegate/selector y target/action?
- 23. ¿Hay alguna diferencia entre UTF8Encoding.UTF8.GetBytes y Encoding.UTF8.GetBytes?
- 24. ¿Hay alguna diferencia entre 'imprimir' y 'eco' en PHP?
- 25. ¿Hay alguna diferencia entre BOOL y Boolean en Objective-C?
- 26. ¿Hay alguna diferencia entre "! =" Y "<>" en Oracle Sql?
- 27. ¿Hay alguna diferencia entre utilizar este puntero y no usarlo?
- 28. ¿hay alguna diferencia entre/mnt/sdcard y/sdcard?
- 29. ¿Hay alguna diferencia (de rendimiento) entre Depurar y Liberar?
- 30. ¿Hay alguna diferencia entre RPC e IPC?
Bueno, eso está permitido, excepto que rompe las reglas de aliasing estrictas en el compilador. Arreglaré esa página wiki. Use NSRectFromCGRect y NSRectToCGRect para convertir. – Ken
En 64 bits, o cuando compila con 'NS_BUILD_32_LIKE_64',' NSRect' se define como 'CGRect', por lo que ni siquiera necesita saltar por el aro del puntero. –
no hace 'CGRect cgrect = (CGRect) nsrect;' ¿hace lo mismo? – Alexander