मुझे लगता है कई विशिष्ट जवाब है कि रुक-रुक कर काम कर रहे हैं निर्धारित करते हैं, लेकिन कोई भी ऐप्लिकेशन या अन्य के आराम करने के लिए के रूप में अंतर्दृष्टि प्रदान क्या असर या दुष्प्रभाव होते हैं संबंध में, नियंत्रक देखें, यदि उपयोगकर्ता फोन को बाहर झुकाव शुरू करता है व्यू कंट्रोलर जिसके लिए आप अभिविन्यास को नियंत्रित करना चाहते हैं ...
इसके साथ खेलने के बाद, आप महसूस कर सकते हैं (जैसे खुद) कि प्रतिकूल या अवांछित परिणाम हो सकते हैं (यानी। अभिविन्यास परिवर्तन तब होते हैं जब आप उन्हें नहीं चाहते हैं, या इसके विपरीत)।
अपने मुख्य प्राप्ति शामिल है कि केवल 'मूल दृश्य नियंत्रक' लागू करेगा 'shouldAutorotate', और नहीं बस किसी भी व्यक्ति को देखने के नियंत्रक आप के साथ ओवरराइड करने के लिए प्रयास करते हैं।
इस प्राप्ति के साथ एक विशिष्ट दृश्य नियंत्रक के लिए एक विशिष्ट अभिविन्यास 'लॉक' करना काफी मुश्किल लग रहा था।
(अर्थ है vc_A हमेशा चित्र और नहीं परिदृश्य को बदलने की अनुमति दी हो, जबकि होने vc_B हमेशा परिदृश्य हो सकता है और चित्र के लिए बदलने की अनुमति नहीं है) इस को स्वीकार करने के बाद
, निम्नलिखित कलन विधि क्या है केवल निर्दिष्ट दृश्य नियंत्रकों पर घूमने में सक्षम होने के लिए मेरे लिए काम किया।
स्थापना:
पहले आप (इन झुकाव केवल जिन्हें आप अपने कोड में उपयोग कर सकते हैं हो जाएगा)
या तो Info.plist या मुख्य परियोजना सेटिंग्स फ़ाइल में, झुकाव आप इच्छा की अनुमति देनी
कोड:
1) मेरी जड़ दृश्य नियंत्रक (यहाँ में: MasterViewC ऑनट्रॉलर) मैंने एक बूल प्रॉपर्टी (एक्टोरोटेट) को नामित किया है जिसका उपयोग तब किया जाना चाहिए जब 'चाहिएऑटोरोटेट' का आह्वान किया जाए।
2) रूट व्यू कंट्रोलर को सिंगलटन भी बनाते हैं ताकि किसी भी अन्य बच्चे दृश्य नियंत्रक से आसानी से पहुंचा जा सके (संदर्भों को पारित किए बिना)।
ध्यान दें: '- (bool) shouldAutorotate' और BOOL का उपयोग आप भी पर्यवेक्षक/अधिसूचना पैटर्न या प्रतिनिधिमंडल या कुछ अन्य पैटर्न का उपयोग कर सकते हैं, लेकिन मेरे लिए सिंगलटन पैटर्न के लिए सबसे आसान
3) प्रतिनिधि जोड़ने था इसकी वापसी के लिए ऑटोरोटेट
4) एक उदाहरण विधि 'setInterfaceOrientation' बनाएं। कुछ अन्य वर्ग और/या में अपने 'viewDidLoad' में इस विधि कॉल करेंगे अपने 'viewWillDisappear'
// 1)
@implementation MasterViewController {
BOOL allowAutorotate;
}
// 2)
+ (id)sharedMasterViewController {
static MasterViewController *sharedMasterViewController = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMasterViewController = [[self alloc] init];
});
return sharedMasterViewController;
}
- (id)init
{
self = [super init];
if (self)
{
allowAutorotate = NO;
}
return self;
}
// 3)
- (BOOL)shouldAutorotate
{
return allowAutorotate;
}
// 4)
- (void)setInterfaceOrientation:(NSInteger)orientation
{
allowAutorotate = YES;
NSNumber *value = [NSNumber numberWithInt:orientation];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
allowAutorotate = NO;
}
5) अंत में कुछ अन्य वर्ग में जड़ दृश्य नियंत्रक हो और 'setInterfaceOrientation' तदनुसार
// 5)
#import "MasterViewController.h"
@implementation SomeViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[[MasterViewController sharedMasterViewController] setInterfaceOrientation:UIInterfaceOrientationLandscapeRight];
}
- (void)viewWillDisappear:(BOOL)animated
{
[[MasterViewController sharedMasterViewController] setInterfaceOrientation:UIDeviceOrientationPortrait];
}
आह्वान
नोट:
1) इस उदाहरण का परिणाम होना चाहिए कि एप्लिकेशन शुरू में चित्र में लोड होगा, तो आप 'SomeViewController' को लोड करते हैं, यह परिदृश्य के लिए बदल जाएगा, और फिर जब तुम remov ई, यह वापस चित्र में बदल जाएगा।
2) यह इस तरह काम करता है ...
हर बार जब आप शारीरिक रूप से फोन झुकाव, प्रतिनिधि 'shouldAutorotate' शुरू हो जाती है (केवल 'मूल दृश्य नियंत्रक' से),
रूप में अच्छी तरह हर बार जब आप प्रोग्राम के रूप में फोन झुकाव
NSNumber *value = [NSNumber numberWithInt:orientation];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
प्रतिनिधि 'चाहिएऑटोरोटेट' का आह्वान किया जाता है।
इस
कारण है कि हम पहले 'allowAutorotate = हाँ,', तो, 'फोन झुकाव' तो 'allowAutorotate = नहीं;'
इसलिए, हमारे पास एक बार प्रोग्रामेटिक रूप से, जब हम चाहते हैं, केवल उन्मुखीकरण परिवर्तन को अनुमति देने/निष्पादित करने का नतीजा है।
glhf!
आईओएस 6.0 में बहिष्कृत। समर्थित इंटरफेसऑरिएंटेशंस को ओवरराइड करें और इसके बजाय पसंदीदा इंटरफेसऑरिएंटेशन फॉर प्रेजेंटेशन विधियों को ओवरराइड करें।) – MOBYTELAB