2012-08-07 15 views
6

he visto este alternativa al uso de CGRectMake() con el fin de inicializar una variable CGRect:CGRectMake alternativa

CGRect frame = (CGRect) {0,0,10,10};

Mi pregunta es, ¿cómo funciona CGRect frame = (CGRect){0,0,10,10};? ¿Qué está pasando detrás de escena? Parece que se está inicializando una matriz c-style ({x,y,w,h}) que se está lanzando como estructura CGRect. ¿Es correcto? Si es así, ¿cómo es posible lanzar una matriz de estilo c como una estructura?

N. B. No estoy preguntando si es apropiado usar la alternativa anterior al CGRectMake(), solo deseo entender por qué y cómo funciona.

+0

Simplemente funciona si las dos sentencias crean la misma secuencia de bytes. Sin embargo, estoy confundido de que está usando 0 y 10 en lugar de 0.0 y 10.0. 0 y 10 se compilarían como constantes enteras y se obtendrían 0.0 y 10.0 como constantes flotantes/dobles. Por lo tanto, dudo que pueda usar float como marco legal para cualquier cosa útil. CGRect es una estructura hecha de CGPoint y CGSize. Ambos están compuestos por dos miembros de CGFload (x e y en el caso de CGPoint y ancho y alto en el caso de CGSize). –

Respuesta

1

U puede utilizar la siguiente manera:

CGRect rect = CGRectFromString(@"{{0, 0}, {612, 892}}"); // it contents { CGPoint origin;CGSize size;}; 
NSLog(@"rect : %@",NSStringFromCGRect(rect)); 
1

Comprobar esto:

CGPoint origin = {10, 20}; 
CGSize size = {100, 200}; 
CGRect rect = {origin, size};