2010-03-26 13 views
18

मैं एक UIView subclassing और drawRect विधि overwrite हूँ। मैं देख रहा हूं कि दृश्य का प्रदर्शन केवल तभी देखा जा रहा है जब दृश्य पहले लोड हो। उसके बाद इसे फिर कभी नहीं बुलाया जाता है। मैं कैसे सुनिश्चित कर सकता हूं कि इसे अभिविन्यास परिवर्तन के बाद बुलाया जाए? मैंने रोटेशन से पहले और बाद में दृश्य पर सेटNeedsDisplay को कॉल करने का प्रयास किया है और यह ऐसा नहीं करता है।आईफोन एसडीके: अभिविन्यास परिवर्तन के बाद UIView सबक्लास पर drawRect को कैसे ट्रिगर करें?

उत्तर

57
[myView setContentMode:UIViewContentModeRedraw]; 

साथ ही आप आईबी में इस सेट कर सकते हैं (यानी, सेट मोड "पुनः बनाने" के लिए)

+1

यह पसंदीदा तरीका है। – yuji

+0

नीचे मूल लेखक की प्रतिक्रिया देखें। setNeedsDisplay वास्तव में सही विधि कॉल है। –

+3

'setNeedsDisplay:' तब प्रयोग किया जाता है जब आप प्रोग्राम को रीड्रो को ट्रिगर करना चाहते हैं। जब आप एक रेड्रो ट्रिगर करने के लिए अभिविन्यास परिवर्तन चाहते हैं तो 'setContentMode:' टिकट है। – wcochran

8

यह कुछ पूरी तरह से अलग से संबंधित एक बग था। setNeedsDisplay वास्तव में drawRect कहलाता है।

+0

हां 'सेटडिड्स डिस्प्ले:' एक रेड्रो ट्रिगर करेगा, लेकिन प्रोग्रामर को स्पष्ट रूप से इसका आह्वान करने की आवश्यकता है। 'setContentMode:' स्वचालित रूप से अभिविन्यास परिवर्तन पर एक रेड्रो ट्रिगर करेगा। – wcochran

0

इस जवाब और दृश्य रोटेशन/drawRect funkiness के बारे में अन्य 94,000 समान सवालों का,

-(id)initWithFrame:(CGRect)frame 
{ 
    if(self=[super initWithFrame:frame]) { 
     self.autoresizesSubviews=YES; 
     self.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 
    } 
    return self; 
} 
संबंधित मुद्दे