2010-04-20 7 views
6

The documentation का कहना है कि अगर मैं दोनों पोर्ट्रेट और लैंडस्केप समर्थन करना चाहते हैं, मैं मूल रूप से है कि करने के दो तरीके हैं:समान दृश्य नियंत्रक के लिए अलग-अलग डिवाइस उन्मुखताओं के लिए अलग-अलग XIB कैसे लोड करें?

  1. ViewController का दृष्टिकोण सेट करें जिससे subviews सही ढंग से autoresize और प्रोग्राम के रूप में क्रम
  2. में छोटे बदलाव करने के
  3. परिवर्तन अधिक पर्याप्त हैं, create an alternative landscape interface और धक्का/वैकल्पिक मॉडल ViewController क्रम

मैं जानकारी जहां लेआउट काफी अलग है प्रस्तुत करना चाहते हैं पर पॉप, लेकिन तर्क में ही है। आदर्श रूप से, मैं एक ही व्यू कंट्रोलर के लिए एक और XIB लोड करूंगा, लेकिन ऐसा लगता है कि यह एक विकल्प नहीं है।

ऐसा लगता है कि मुझे # 2 की आवश्यकता है, लेकिन इसके साथ मेरी समस्या यह है कि ऐसा लगता है कि यह मानक मोडलव्यू कंट्रोलर एनिमेशन का उपयोग करेगा जो डिवाइस रोटेशन एनीमेशन जैसी कुछ नहीं है। (बेशक, मैं जो आलसी हूं, मैंने इस परिकल्पना का परीक्षण नहीं किया।)

तो, मैं उसी व्यू कंट्रोलर के साथ परिदृश्य के लिए वैकल्पिक लेआउट कैसे लोड करूं लेकिन अलग-अलग XIB? क्या मुझे ऊपर विधि # 2 का उपयोग करना चाहिए और घूर्णन एनीमेशन प्राकृतिक है? या क्या कोई और तरीका है?

उत्तर

1

मैं -viewDidLoad: में मेरी UIView उदाहरणों का दृष्टांत और देखने नियंत्रक के view संपत्ति को subviews के रूप में उन्हें जोड़ें:

- (void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self adjustViewsForOrientation:[[UIDevice currentDevice] orientation]]; 
} 

मैं भी -willRotateToInterfaceOrientation:duration: ओवरराइड: उन subviews केंद्र के लिए

- (void) viewDidLoad { 
    [super viewDidLoad]; 

    self.myView = [[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 280.0f, 210.0f)] autorelease]; 
    // ... 
    [self.view addSubview:myView]; 
} 

मैं तो -viewWillAppear: फोन

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)newInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self adjustViewsForOrientation:newInterfaceOrientation]; 
} 

-adjustViewsForOrientation: विधि, विभिन्न subview वस्तुओं के केंद्र CGPoint सेट डिवाइस का अभिविन्यास के आधार पर:

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation { 
    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { 
     myView.center = CGPointMake(235.0f, 42.0f); 
     // ... 
    } 
    else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) { 
     myView.center = CGPointMake(160.0f, 52.0f); 
     // ... 
    } 
} 

जब दृश्य नियंत्रक भरी हुई है, UIView उदाहरणों बनाई गई हैं और उपकरण के वर्तमान रुचि के आधार पर तैनात हैं। यदि डिवाइस को बाद में घुमाया जाता है, तो विचार नए समन्वय में फिर से केंद्रित होते हैं।

यह आसान बनाने के लिए, शायद -adjustViewsForOrientation: में एक कीड एनीमेशन का उपयोग किया जा सकता है, ताकि सबव्यू एक और केंद्र से दूसरे स्थान पर बढ़ जाए। लेकिन अब के लिए उपरोक्त काम करता है।

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