2013-08-26 13 views
5

मैं अपने ऐप में प्रोग्रामेटिक रोटेशन लॉक को अमेज़ॅन के किंडल ऐप में पाया गया है: जब डिवाइस घुमाया जाता है, तो लॉक बटन दिखाता है; बटन दबाएं और अभिविन्यास को ओरिएंटेशन पर लॉक किया गया है जब इंटरफ़ेस बटन दबाया गया था।प्रोग्रामेटिक रोटेशन लॉक अनलॉक करने के बाद डिवाइस अभिविन्यास पर घुमाने के लिए फोर्स आईओएस व्यू कंट्रोलर

अनलॉक करने के बाद, मैं इंटरफ़ेस को वर्तमान डिवाइस अभिविन्यास पर घुमा देना चाहता हूं। कहें कि आप पोर्ट्रेट में रोटेशन लॉक करते हैं, डिवाइस को बाएं परिदृश्य में घुमाएं, और फिर अनलॉक करें; मैं इंटरफ़ेस को बाएं परिदृश्य में घुमाने के लिए चाहता हूं।

- (IBAction)toggleRotationLock:(UIButton *)sender { 
BOOL rotationLocked = [_defaults boolForKey:@"RotationLocked"]; 
if (rotationLocked) { //unlock rotation 
    [_defaults setBool:NO forKey:@"RotationLocked"]; 
    /* force rotation to current device orientation here? 
    * ... 
    */ 
} else { //lock rotation to current orientation 
    [_defaults setBool:YES forKey:@"RotationLocked"]; 
    [_defaults setInteger:self.interfaceOrientation forKey:@"RotationOrientation"]; 
} 
    [_defaults synchronize]; 
    [self setupRotationLockButton]; 
} 

यह करने के लिए किसी भी तरह से: यहाँ विधि है कि ताला टॉगल है?

उत्तर

2

कुंजी 1 है) मौजूदा डिफ़ॉल्ट अभिविन्यास को उपयोगकर्ता डिफ़ॉल्ट रूप से सहेजने की तरह ही आप कर रहे हैं 2) बाकी सभी जो आपको करने की ज़रूरत है वह उन दृश्य नियंत्रकों के ओवरराइड विधियों में है जिन्हें आप लॉक करने योग्य बनाना चाहते हैं (IOS 6+ के लिए) , supportedInterfaceOrientations)। अपने सहेजे गए उपयोगकर्ता डिफ़ॉल्ट का उपयोग यह देखने के लिए करें कि आप किस ओरिएंटेशन को अनुमति दे रहे हैं या नहीं, इसके आधार पर।

फिर attemptRotationToDeviceOrientation उनके तरीकों फिर से फोन और पुनर्मूल्यांकन क्या रोटेशन वे उपकरणों वर्तमान रोटेशन दिया में होना चाहिए के लिए अपने दृश्य नियंत्रक बताने के लिए कहते हैं।

+0

धन्यवाद, tryRotationToDeviceOrientation चाल करता है! – dysfunction

0

इस तरह मैं इसे काम करने के लिए मिलता हूं, बस अगर कोई यहां आता है तो कोड को देखना चाहता है। :)

-(IBAction)lockOrientation:(UIButton*)sender 
{ 
if (orientationLocked) { //Unlock it, "orientationLocked" is a boolean defined in .h 
    orientationLocked = NO; 
    [sender setTitle:@"Unlocked" forState:UIControlStateNormal]; 
} 
else 
{ // Lock it. 

    //Save the orientation value to NSDefaults, can just be int if you prefer. 
    // "defaults" is a NSUserDefaults also defined in .h 

    [defaults setInteger:[[UIApplication sharedApplication] statusBarOrientation] forKey:@"orientation"]; 
    orientationLocked = YES; 
    [sender setTitle:@"Locked" forState:UIControlStateNormal]; 
} 
} 

- (NSUInteger)supportedInterfaceOrientations{ 
if (orientationLocked) { 

    return = [defaults integerForKey:@"orientation"]; 
} 
return UIInterfaceOrientationMaskAllButUpsideDown; 
} 
+0

यह बिल्कुल सवाल नहीं है कि मैं पूछ रहा था- मैं रोटेशन लॉक को कार्यान्वित करने के बारे में नहीं पूछ रहा था, जो मैंने पहले ही किया था, मैं पूछ रहा था कि रोटेशन लॉक अनलॉक होने पर डिवाइस ओरिएंटेशन में घुमाने के लिए कैसे। ऐसा लगता है कि परमाणु ने यह भी सोचा कि मैंने पूरी बात कैसे की है, लेकिन उसने मेरे वास्तविक प्रश्न का उत्तर दिया - UIViewController क्लास विधि प्रयास RotationToDeviceOrientation मुझे बस चाहिए था। – dysfunction

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