2009-02-10 8 views
7

मेरे पास एक टैबबार आधारित ऐप है।टैबबार ऐप में परिदृश्य में दृश्य कैसे घुमाएं

मैं इंटरफेस बिल्डर में 2 दृश्य, एक चित्र में और दूसरा लैंडस्केप मोड में बनाता हूं।

अब, मैं आईपॉड ऐप की तरह कुछ चाहता हूं। मैं परिदृश्य दृश्य पूर्णस्क्रीन होना चाहता हूं, और टैबबार & स्टेटस बार छुपाएं।

मैं इस के बुनियादी काम करने के लिए करते हैं:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
           duration:(NSTimeInterval)duration { 
    if (self.landscape) { 
     if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
     { 
      self.view = self.portrait; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(360)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
     { 
      self.view = self.landscape; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
     { 
      self.view = self.landscape; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
     } 
     else 
     { 
      self.view = self.portrait; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-180)); 
     } 
    } 
} 

लेकिन सब गंदा काम करते हैं। लैंडस्केप व्यू सही ढंग से क्षेत्र को भरता नहीं है और नियंत्रण गलत स्थानों में स्थित हैं, जो पहले des desned के रूप में अलग हैं।

इसके अलावा, मैं अभी भी नहीं एक तरह से सब कुछ छिपाने के लिए

setStatusBarHidden:(BOOL) 
एक UIApplication संदर्भ पर

बुला, इसलिए तरह से मिला ...

उत्तर

1

आप स्थिति पट्टी छुपा सकते हैं।

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

[application setStatusBarHidden:YES]; 

} 

,, tabbar से छुटकारा पाने के लिए आपको अपने कोड के लिए इंटरफ़ेस बिल्डर में एक संदर्भित आउटलेट बनाने के लिए और फोन

[myUITabBar removeFromSuperview]; 

काम हो सकता है कि कर सकते हैं, हालांकि मैं यह परीक्षण नहीं किया दूसरे के लिए के रूप में प्रश्न, मैं 100% नहीं हूं, इससे पहले समस्याओं का सामना नहीं किया।

1

ठीक है, यह जहाँ तक मैं इस काम में लगाया है:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
           duration:(NSTimeInterval)duration { 
    if (self.landscape) { 
     if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
     { 
      self.view = self.portrait; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(360)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
     { 
      self.view = self.landscape; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
     { 
      self.view = self.landscape; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
     } 
     else 
     { 
      self.view = self.portrait; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-180)); 
     } 
    } 
} 

अब, AppDelegate में:

- (void) didRotate:(NSNotification *)notification 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    [UIView beginAnimations:nil context:NULL]; 

    if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) 
    { 
     [tabBarController.view setAlpha:0.0]; 
     [tabBarController.view removeFromSuperview]; 

     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; 
    } else { 
     [tabBarController.view setAlpha:1.0]; 
     [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];  
    } 
    [UIView commitAnimations]; 
} 

लेकिन फिर कैसे वर्तमान दृश्य की स्थापना की और कैसे tabbar बहाल?

1

जब मैं आईपॉड ऐप को देखता हूं, तो मुझे लगता है कि TabBarController दृश्य को किसी भी तरह से बदला या संशोधित नहीं किया गया है। मुझे लगता है कि टैबबार नियंत्रक दृश्य और कवरफ्लो व्यू के बीच केवल एक फीका संक्रमण है।

यदि मैं आप थे, तो मैं कोशिश करता हूं (यह सुनिश्चित नहीं है कि यह काम कर सकता है) कवरफ्लो नियंत्रक के साथ, टैबबार्रोलर के दृश्य के शीर्ष पर प्रदर्शित दृश्य के साथ। यदि टैबबारकंट्रोलर को अपने विचार को स्वत: स्वरूपित करने से रोक देगा, लेकिन उस पल में मैं इसके दृश्य को मिटा दूंगा और कवरफ्लो व्यू में फीका होगा, जो केवल परिदृश्य होगा।

मुझे नहीं पता कि स्टेटसबार का उचित व्यवहार होगा या नहीं, और मैंने आपके लिए हल करने के लिए बहुत सारे विवरण दिए हैं, लेकिन किसी भी मामले में मुझे लगता है कि दो अलग-अलग नियंत्रक होने का अच्छा विचार होगा, एक परिदृश्य में दिखाया गया है, चित्र में अन्य (टैबबार)।

आशा है कि आपकी मदद करेगा।

1

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

मैंने ऐप्पल डेवलपर्स फ़ोरम पर वास्तव में यह संभव है कि क्या यह वास्तव में संभव है या नहीं, लेकिन अभी तक कोई जवाब नहीं मिला है।

यह कठिन क्यों है? (क्षमा करें, एक नौसिखिया सवाल? ऐसा लगता है जैसे कुछ स्पष्ट चीजें कठिन नहीं होनी चाहिए) मुझे अभी तक ऑनलाइन नहीं मिला है इसका कोई स्पष्ट जवाब नहीं है।

5

ऐप्पल के "वैकल्पिक दृश्य" नमूना कोड को देखें।

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

+0

इसके लिए धन्यवाद !! – mobius