2009-01-10 18 views
9

ठीक है, मुझे अपना सामान्य ऐप मिला है जो पोर्ट्रेट मोड में है। मैं (navigationController और ViewController का प्रयोग करके) इस तरह के एक दृश्य के लिए लैंडस्केप मोड में जाने के लिए मेरे एप्लिकेशन मजबूर कर सकते हैं:आईफोन एसडीके: अभिविन्यास (लैंडस्केप और पोर्ट्रेट दृश्य)

- (void)viewWillAppear:(BOOL)animated { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 
} 

लेकिन तब जब मैं मुख्य मेनू में वापस जाने (tableview) यह चित्र के लिए सीधे वापस चला जाता है। मैं इस कोड का प्रयास करें:

- (void)viewWillAppear:(BOOL)animated { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 
} 

लेकिन वह काम नहीं करता ..

कोई भी विचार?

उत्तर

9

UIViewController क्लास में shouldAutorotateToInterfaceOrientation: फ़ंक्शन पर नज़र डालें। यदि आपके UIView द्वारा उन्मुखता समर्थित है तो यह फ़ंक्शन YES को वापस कर देता है। यदि आप केवल परिदृश्य अभिविन्यास में YES वापस करते हैं, तो आईफोन स्वचालित रूप से उस अभिविन्यास में डाल दिया जाएगा।

निम्नलिखित कोड इसे करना चाहिए। इसे UIViewController में रखें जो उस दृश्य को नियंत्रित करता है जिसे आप लैंडस्केप मोड में रखना चाहते हैं।

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationLandscape); 
} 
0

आपको उपयुक्त जानकारी (UIInterfaceOrientationLandscapeRight या UIInterfaceOrientationLandscapeLeft) के साथ UIInterfaceOrientation कुंजी जोड़ने के लिए अपनी Info.plist फ़ाइल को संपादित करने की आवश्यकता है।

+0

कि सिर्फ एक चित्र तालिका मुख्य स्क्रीन पर वापस जाने के लिए है? क्योंकि मैं सबकुछ चित्र चाहता हूं, सिर्फ एक दृश्य परिदृश्य। मैं इसे परिदृश्य प्राप्त कर सकता हूं लेकिन फिर जब मैं वापस जाता हूं तो मुझे इसे पोर्ट्रेट पर वापस लाने के लिए फोन घुमाने पड़ता है। मैं नहीं चाहता कि उपयोगकर्ता बाकी परिदृश्य रखें। – Domness

7

यह काम करने के लिए, मैं rootviewcontroller को यह कहा:

- (void)viewWillAppear:(BOOL)animated { 
    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 

} 

यह अब काम कर रहा है।

पहले, यह आपके फ़ाइल के शीर्ष पर परिभाषित करते हैं, अपने #imports के तहत सही डाल:

#define degreesToRadian(x) (M_PI * (x)/180.0) 

तो, viewWillAppear में:

+0

क्या यह निजी एपीआई का उपयोग करने के रूप में गिना जाता है?अभिविन्यास को एक पाठक संपत्ति के रूप में दस्तावेज किया गया है। – lawrence

+0

यह ऐप्पल के माध्यम से ठीक है :) – Domness

+0

यह लाइन केवल सिम्युलेटर को घुमा सकती है। तर्क में, आप उपयोगकर्ताओं को अपने iPhones घुमाने के लिए प्रोग्रामिंग स्क्रिप्ट का उपयोग नहीं कर सकते हैं; आप केवल उपयोगकर्ताओं को संकेत दे सकते हैं। – Raptor

3

यहाँ मैं यह करने के कर रहा हूँ है विधि

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];  
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 

अगर आप चाहते हैं कि एनिमेटेड जाना है, तो आप पूरी बात एक एनीमेशन ब्लॉक में लपेट कर सकते हैं, तो जैसे:

[UIView beginAnimations:@"View Flip" context:nil]; 
[UIView setAnimationDuration:1.25]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];  
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 
[UIView commitAnimations]; 

फिर, अपने पोर्ट्रेट मोड नियंत्रक में, आप रिवर्स-चेक कर सकते हैं यह देखने के लिए कि वर्तमान में यह परिदृश्य में है या नहीं, और यदि ऐसा है, तो उसे पोर्ट्रेट पर घुमाएं।

+0

आप करीब हैं। self.view.frame = CGRectMake (0.0f, 0.0f, 480.0f, 320.0f); self.view.transform = CGAffineTransformMakeRotation (°ToRadian (-90)); self.view.center = CGPointMake (160.0f, 240.0f); हमें स्क्रीन के केंद्र में दृश्य केंद्र सेट करना होगा, और स्क्रीन को भरना होगा (20px स्पेस के बिना)। – Raptor

+0

यदि आप स्टेटस बार को छिपाना नहीं चाहते हैं तो आप [[यूआईएप्लिकेशंस साझा एप्प्लिकेशंस] सेटस्टैटसबारऑरिएंटेशन: UIInterfaceOrientationLandscapeRight] जोड़ सकते हैं; –

0

आप इस प्राइवेट एपीआई का उपयोग नहीं कर सकते।

ऐसा करने का एक समाधान है: यह दृश्य नियंत्रक का उपयोग करना और विंडो में अपना दृश्य जोड़ना है। फिर उस नियंत्रक में आप परिदृश्य को मजबूर कर सकते हैंऑटोरोटेट ... मेथोड। यह ठीक काम करता है, लेकिन सुनिश्चित करें कि आपके प्रोजेक्ट का उपयोग करना आवश्यक है, क्योंकि उपयोगकर्ता को अपने आईफोन को चालू करने के लिए मजबूर करना बहुत स्मार्ट नहीं है। वैसे, यदि आपको इसकी आवश्यकता है तो यहां एक उदाहरण कोड है।

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

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