2012-05-03 13 views
6

मैं अपने UIPageViewController के नेविगेशन को बदलना चाहता हूं जब मैं अपने UIViewController के अभिविन्यास को बदलता हूं। यही है, जब डिवाइस पोर्ट्रेट पर घुमाया जाता है तो मैं navigationOrientationUIPageViewControllerNavigationOrientationVertical से UIPageViewControllerNavigationOrientationHorizontal में बदलने के लिए चाहता हूं।आईपैड: यूआईपीएज व्यू कंट्रोलर नेविगेशनऑरिएंटेशन

मैंने दृश्य नियंत्रक के घूर्णन पर navigationOrientation संपत्ति सेट करने का प्रयास किया लेकिन मुझे पता चला कि navigationOrientation संपत्ति केवल पढ़ने के लिए है।

यहां दी गई छवियां हैं जो मैं चाहता हूं।

लैंडस्केप देखें Landscape View

पोर्ट्रेट दृश्य enter image description here

मुझे क्या करना चाहिए?

+0

उपयोग xib में autoresize उपयोग करना चाहिए। – vishiphone

+0

@vishiphone: कैसे ऑटोरेसाइजिंग उसकी समस्या में मदद करेगा? क्या आप समझ गए कि वह पृष्ठ को लंबवत से क्षैतिज में बदलने के लिए चाहते हैं? –

+0

@ पार्थबैथ मुझे लगता है कि वह दृश्य को अभिविन्यास की तरह घूमना चाहता है क्योंकि उसकी छवि और प्रश्न केवल इसी तरह है। – vishiphone

उत्तर

3

अच्छा सवाल।

पता नहीं क्यों, लेकिन ऐसा लगता है जैसे ऐप्पल नहीं चाहता कि आप उस संपत्ति को बदल दें। या तो तकनीकी कारण या कुछ प्रकार के यूआई-दिशानिर्देश।

वैसे भी आप उन्मुखीकरण आप एक अलग दृष्टिकोण के साथ जाने के लिए और दोUIPageViewControllers, प्रत्येक का उपयोग एक और नेविगेशन उन्मुखीकरण है, जो एक प्रतिनिधि हिस्सा के साथ करना चाहिए नहीं बदल सकते हैं। डिवाइस चालू होने पर आप संबंधित विचारों को छुपाएं/दिखाएं या प्रत्येक डिवाइस को चालू करने के लिए एक नया ऑब्जेक्ट इनिट/रिलीज़ करें।

बीटीडब्ल्यू। क्या आपने प्रतिनिधि के pageViewController:spineLocationForInterfaceOrientation: विधि को देखा है। लगता है जैसे कि डिवाइस अभिविन्यास में परिवर्तन पर प्रतिक्रिया की एप्पल के पसंदीदा तरीका यह एक है:

चर्चा उपयोग रीढ़ स्थान बदलने के लिए इस विधि जब डिवाइस अभिविन्यास परिवर्तन, साथ ही स्थापना के नए दृश्य नियंत्रकों और बदलते डबल पक्षीय राज्य।

यह विधि केवल तभी कॉल की जाती है जब संक्रमण शैली UIPageViewControllerTransitionStylePageCurl है।

ध्यान दें कि ऐप्पल का कैलेंडर ऐप पोर्ट्रेट में बहुत पतले पृष्ठों के साथ जाता है - वास्तव में यूआई का उनका विचार लगता है।

+0

हां, ऐप्पल कैलेंडर जैसे दृश्य को हटाकर किया जा सकता है "अगर (UIInterfaceOrientationIsPortrait (ओरिएंटेशन))" –

+0

बिल्कुल नहीं पता कि आपका क्या मतलब है, लेकिन कैलेंडर ऐप ** करता है * * डिवाइस अभिविन्यास परिवर्तन पर प्रतिक्रिया। यह डिवाइस चालू होने पर प्रत्येक पृष्ठ के लिए दृश्य (नियंत्रक) को बदलता है।आप देख सकते हैं कि मासिक ओवरव्यू बाएं से दाएं पृष्ठ पर स्विचिंग। –

+0

@ डेवंग हाय देवंग, मुझे आपकी आवश्यकता की तरह कुछ चाहिए। मैं जो कर रहा हूं वह है कि मेरे पास पहली बार पहली बार स्क्रीन पर दो दृश्य दिखाने के लिए सरणी में जोड़े गए पांच व्यू कंट्रोलर और स्क्रीन व्यू कंट्रोलर का उपयोग करना है। मेरे पास मेरे ऐप के लिए लैंडस्केप व्यू तय है। मैं जो चाहता हूं वह चार व्यू कंट्रोलर दिखाने के बाद है, यह लैंडस्केप पर सिंगल व्यू कंट्रोलर दिखाएगा। क्या आप इसके लिए मुझे मार्गदर्शन कर सकते हैं, मेरी बाकी कार्यक्षमता केवल यही वह हिस्सा है जिसे मैं अभी तक हल नहीं कर सका। –

0

मैं एक से थोड़ा अलग तरीके से इस समस्या को हल, मैं UIPageViewController वर्ग विरासत में मिला है और इस प्रकार initWithCoder ओवरराइड:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    NSDictionary *options = nil; 

    if ([self isLandscapeOrientation]) 
    { 
     options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid] forKey:UIPageViewControllerOptionSpineLocationKey]; 
    } 

    self = [super initWithCoder:aDecoder]; 

    return [super initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options]; 
} 

- (BOOL)isLandscapeOrientation 
{ 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

    return UIInterfaceOrientationIsLandscape(orientation); 
} 
संबंधित मुद्दे