La razón por la que esto no funciona se debe a la mezcla de dos sintaxis.
Primero tiene "." como un atajo para llamar a las funciones de acceso (una característica de Objective-C). Así
- a.b se convierte en [a getB];
- a.b = 5 se convierte en [a setB: 5];
Y luego hay "."Como acceso directo struct miembro (C puro) Así
- ab realmente es ab;.
- ab realmente es ab = 5;
Combinando esto en un conjunto de valores de los casos como éste , no funciona.
Porque ... si se puede llamar
myView.frame.origin.x = 25.0;
La parte "myView.frame" es igual a [myView GetFrame] y se obtiene un marco CGRect copiado (una estructura C)
El "myView.frame.origin" le da un origen CGPoint (también una estructura) de la copiado CGRect
el "myView.frame.origin.x = 25,0" le da una CGFloat x del origen y ahora desea asignar algo a ella y aquí viene el problema ...
Intenta establecer una variable de una estructura de una estructura, lo que está bien, pero no hay un puntero desde UIView a la estructura, por lo que se copia en su lugar. Así que copie y luego configure y luego espera que la acción establecida se reenvíe de alguna manera a través del acceso inicial a UIView, y esto simplemente no funciona.
Por supuesto, podría preguntarse por qué Apple no acaba de crear un atajo, de modo que al final su foto copiada se reinyecta automáticamente en una llamada setFrame añadida automáticamente, supongo que solo tiene que vivir cómo es.
Así que recuerda, funcionaría si obtienes un puntero al marco, pero no lo haces, obtienes una estructura copiada.
Si espera que myView.frame.origin.x = 25.0
funcione, espera que su llamada se traduzca automágicamente a algún tipo de
[myView setFrame:[myView getFrame:frame].origin.x = 25.0]
.
Bueno, supongo que puedes admitir que esto parece estar mal.
Imagine también que si obtiene un puntero directo al marco CGRect y cambia algo a través de ese puntero, ¿cómo sabría la UIView que su tamaño ha cambiado y que debe actualizarse? Si, por otro lado, se realiza una llamada [myView setFrame: newFrame], entonces UIView puede realizar todos los reajustes necesarios.
+1 - Me he estado preguntando sobre esto durante bastante tiempo ... – Emil