Las otras respuestas no explican exactamente lo que está pasando aquí, por lo que este es el problema básico:
Cuando se escribe blackKey.center.x
, la blackKey.center
y center.x
tanto se parecen a los accesos miembro de estructura, pero' en realidad son cosas completamente diferentes. blackKey.center
es un acceso a la propiedad, que se deshace a algo así como [blackKey center]
, que a su vez desagua a algo así como objc_msgSend(blackKey, @selector(center))
. No puede modificar el valor de retorno de una función, como objc_msgSend(blackKey, @selector(center)).x = 2
- simplemente no es significativo, porque el valor de retorno no es almacenado en cualquier lugar significativo.
Por lo tanto, si desea modificar la estructura, debe almacenar el valor de retorno de la propiedad en una variable, modificar la variable y luego establecer la propiedad en el nuevo valor.
Tenga en cuenta que 'whiteKey.frame.origin.x + whiteKey.frame.size.width' es lo mismo que' CGRectGetMaxX (whiteKey.frame) '. – ThomasW