अन्य उत्तर वास्तव में व्याख्या नहीं करते यहाँ क्या हो रहा है, इसलिए इस बुनियादी समस्या है:
जब आप blackKey.center.x
, लिखने blackKey.center
और center.x
दोनों तरह struct सदस्य तक पहुँचता लगते हैं लेकिन वे ' वास्तव में पूरी तरह से अलग चीजें हैं। blackKey.center
एक संपत्ति का उपयोग है, जो [blackKey center]
जैसी किसी चीज़ से बेकार है, जो बदले में objc_msgSend(blackKey, @selector(center))
जैसा कुछ है। आप objc_msgSend(blackKey, @selector(center)).x = 2
जैसे फ़ंक्शन के रिटर्न वैल्यू को संशोधित नहीं कर सकते - यह केवल सार्थक नहीं है, क्योंकि वापसी मान संग्रहीत कहीं भी सार्थक नहीं है।
तो यदि आप संरचना को संशोधित करना चाहते हैं, तो आपको एक चर में संपत्ति का रिटर्न वैल्यू स्टोर करना होगा, चर को संशोधित करना होगा, और फिर संपत्ति को नए मान पर सेट करना होगा।
ध्यान दें कि 'whiteKey.frame.origin.x + whiteKey.frame.size.width' के रूप में' एक ही है CGRectGetMaxX (whiteKey.frame) '। – ThomasW