Mah*_*hir 41 floating-point objective-c variable-assignment ios cgrect
在钢琴应用程序中,我正在分配黑键的坐标.这是导致错误的代码行.
'blackKey'和'whiteKey'都是customViews
blackKey.center.x = (whiteKey.frame.origin.x + whiteKey.frame.size.width);
Run Code Online (Sandbox Code Playgroud)
Chu*_*uck 82
其他答案并没有准确地解释这里发生了什么,所以这是基本问题:
当你写blackKey.center.x
的时候blackKey.center
,center.x
两者看起来都像是结构成员访问,但它们实际上是完全不同的东西.blackKey.center
是一个属性访问,这类似的东西[blackKey center]
,这反过来desugars类似的东西objc_msgSend(blackKey, @selector(center))
.你不能修改函数的返回值,比如objc_msgSend(blackKey, @selector(center)).x = 2
- 它只是没有意义,因为返回值不存储在任何有意义的地方.
因此,如果要修改结构,则必须将属性的返回值存储在变量中,修改变量,然后将该属性设置为新值.
Emp*_*ack 19
你不能直接改变x
的值CGPoint
这样的(或结构的任意数值),如果它是一个对象的属性.做类似以下的事情.
CGPoint _center = blackKey.center;
_center.x = (whiteKey.frame.origin.x + whiteKey.frame.size.width);
blackKey.center = _center;
Run Code Online (Sandbox Code Playgroud)
Dai*_*air 10
blackKey.center = CGPointMake ( whiteKey.frame.origin.x + whiteKey.frame.size.width, blackKey.center.y);
Run Code Online (Sandbox Code Playgroud)
一种方法.