2012-02-23 12 views
13

यह उन लोगों के लिए बहुत मूर्खतापूर्ण हो सकता है जो इसे जानते हैं लेकिन मैं आईओएस के लिए काफी नया हूं। मैं जानना चाहता था, हम मूल या आकार को क्यों संशोधित नहीं कर सकते हैं या UIView फ्रेम के इन गुणों की x, y या ऊंचाई चौड़ाई क्यों हो सकते हैं?हम UIView फ्रेम के आकार या मूल को सीधे क्यों नहीं बदल सकते हैं?

फ्रेम एक CGRect struct और मूल और आकार रहे हैं फिर से CGPoint और CGSize संरचनाओं है। जब हम उन्हें एक्सेस कर सकते हैं, हम उन्हें क्यों संशोधित नहीं कर सकते?

एक CGRect में इस तरह कुछ भी नहीं है, तो हम क्यों नहीं कर सकते हम फ्रेम या सीमा के लिए यह करना विशेषताओं यह है संशोधित कर सकते हैं तो।

+0

महान सवाल, बिलकुल मूर्ख नहीं! –

+1

@ChrisNolet: यह पोस्ट करने के बाद से दो साल से अधिक हो गया है! –

+2

आईओएस करने के 4 साल बाद, मैं अंततः समझता हूं कि मैं फ्रेम को सीधे क्यों सेट नहीं कर सकता! –

उत्तर

19

मुझे लगता है तुम्हारा मतलब तुम क्यों कुछ इस तरह नहीं कर सकते:

myView.frame.origin.x = 23.0; 

यह एक अच्छा सवाल है, इसके बारे में मूर्खतापूर्ण कुछ भी नहीं है। समस्या यह है कि फ्रेम दृश्य की संपत्ति के रूप में आयोजित किया जाता है, न कि फ्रेम के व्यक्तिगत घटक (आकार और उत्पत्ति, या यहां तक ​​कि गहरा, चौड़ाई, लंबाई, एक्स और वाई)।

फ्रेम को देखने के लिए मौलिक है, इसलिए वहाँ कार्यों के लिए एक दृश्य है, तो इसके फ्रेम संशोधित किया गया है क्या करने की जरूरत है कि के बहुत सारे हैं। यदि आप सीधे orig.x तक पहुंचने और संशोधित करने के लिए थे तो आप setFrame विधि को छोड़ देंगे जहां यह जादू शायद होता है।

आप का उपयोग view.frame आप एक CGRect view.frame, जितना समान मान है, लेकिन वास्तव में फ्रेम नहीं है कि दी जा रही है, तो यह किसी भी संशोधन को देखने को प्रभावित नहीं करते है।

आप चरणों में कर सकते हैं:

CGRect frame = view.frame; 
frame.origin.x = 23.0; 
view.frame = frame; 
+0

उत्तर के लिए धन्यवाद और मूर्खतापूर्ण पर विचार नहीं करते हैं। लेकिन मुझे समझने के बाद मैं मूर्खतापूर्ण महसूस करता हूं। मुझे उम्मीद है कि किसी को भी ऐसा ही संदेह होगा, यह सहायक होगा। –

+1

क्षमा करें, मुझे अभी भी यह नहीं मिला है। ठीक है, 'view.frame' से हमें एक सी संरचना मिलती है जो वास्तविक 'view.frame' नहीं है। क्या यह कहना आसान नहीं है कि हमें एक प्रतिलिपि मिलती है? ठीक है, तो हमें एक प्रति प्राप्त होती है। वैसे भी एक प्रति की आवश्यकता क्यों है? – Philip007

+0

किसी भी चीज का उत्तर नहीं देता है कि मूल/आकार अपडेट करने से फ्रेम को अपडेट नहीं किया जा सकता है? –

8

जवाब (थोड़ा अस्पष्ट) भाषा वाक्य रचना में निहित है:

  1. myView एक ऑब्जेक्टिव-सी वस्तु है।
  2. तो myView.frame एक संपत्ति एक्सेसर विधि से किया जा रहा भेजने है।
  3. यह सीजीआरईटी प्रकार की सी संरचना देता है।
  4. frame.origin.x = 1 लौटे अस्थायी struct जो आपके कोड पर स्थानीय है संशोधित करता है।

आपका इरादा किसी संदेश को एक संदेश भेजकर कुछ बताना था। लेकिन इसके बजाय आपने ऑब्जेक्ट को डेटा के लिए कहा और फिर इस डेटा को संशोधित किया। वस्तु अब कभी नहीं होगी।

संकलक इस त्रुटि के बारे में चेतावनी चाहिए।

+0

एक स्वच्छ सरलीकृत उत्तर के लिए धन्यवाद। –

संबंधित मुद्दे