2013-05-29 7 views
10

मुझे यहां एक अजीब समस्या का सामना करना पड़ रहा है।एनीमेशन के बिना ओरिएंटेशन अजीब परिणाम देता है जब UIAlertView मौजूद है

किसी कारण मैं मेरे विचार नियंत्रक में उन्मुखीकरण परिवर्तन के दौरान एनीमेशन अक्षम करने हूँ [UIView setAnimationsEnabled:NO];
लेकिन जब चेतावनी दृश्य मौजूद है और अगर मैं ओरिएंटेशन बदलने तो यह अजीब परिणाम दे रहा है उपयोग करने के लिए।

संलग्न स्क्रीन शॉट तब होता है जब मैं अभिविन्यास को परिदृश्य में बदलता हूं।

landscape mode

कृपया ध्यान दें: मैं मानक UIAlertView उपयोग कर रहा हूँ और यह डिफ़ॉल्ट ओवरले जो जब चेतावनी दृश्य मौजूद है और वहाँ कोई अनुकूलन यहाँ शामिल है दिखाया गया है है।

documentation

If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.

के अनुसार तो यह डिफ़ॉल्ट ओवरले का आकार बदलने प्रभावित नहीं होना चाहिए। Is it a restriction in disabling animation !??

मुझे समझ में नहीं आ रहा है कि मुझे ऐसा क्यों मिल रहा है। कोई भी इसे हल करने में मदद कर सकता है।

+0

तो आपको पहले एक 'UIAlertView' प्रदर्शित कर रहे हैं और उसके बाद सही डिवाइस घूर्णन,? या घूर्णन के दौरान इसे प्रदर्शित करना? –

+0

मैं 'UIAlertView' प्रदर्शित कर रहा हूं और फिर डिवाइस को घुमा रहा हूं। –

+0

यह अजीब है क्योंकि जहां तक ​​मुझे याद है, जब 'UIAlertView' प्रदर्शित होता है, तो रोटेशन स्वचालित रूप से अक्षम हो जाता है। –

उत्तर

0

यह iOS6 और नीचे में एक बग हो रहा है और iOS7 में तय हो गई है।

iOS alert view without animation

4

जब आप [UIView setAnimationsEnabled:NO]; सेट करते हैं, UIAlertView इसका ओवरले व्यू का आकार बदल नहीं रहा है (मुझे लगता है कि यह एक बग है)।

वैकल्पिक रूप से आप अभिविन्यास को प्रतिबंधित कर सकते हैं जब चेतावनी दृश्य स्क्रीन पर निम्नानुसार है।

.h फ़ाइल में BOOL चर बनाएँ।

BOOL shouldRotate; 

viewDidload में YES के साथ आरंभ कर देगा।

और जब भी आप उस समय सूचना दिखाएंगे shouldRotate = NO;

बनाने और UIAlertView प्रतिनिधि को लागू इस प्रकार है:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    shouldRotate = YES; 
} 

आशा तुम्हारी मदद करेगा।

संपादित करें: आप दोनों कोई एनीमेशन और चेतावनी दृश्य

यह वास्तव में एक हैक है, लेकिन काम करता है,

alert एक UIAlertView की वस्तु ज ​​फ़ाइल में घोषित है साथ रोटेशन चाहते हैं।

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) { 
     UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; 
     imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); 
    } 
    else{ 
     UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; 
     imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0); 
    } 
} 
+0

आपके उत्तर के लिए धन्यवाद, मुझे यह विकल्प पता है लेकिन मुझे दोनों को देने की ज़रूरत है, इसलिए मैं इसका उपयोग नहीं कर सकता। –

+1

असल में UIAlertView एनीमेशन बदलने के लिए इसके ओवरले व्यू का प्रबंधन करता है (UIAlertView के मेरे डीबग के अनुसार), और जब आप UIView के लिए एनीमेशन अक्षम करते हैं तो यह भाग निष्पादित नहीं होता है और ओवरले व्यू आवश्यकता के अनुसार आकार बदल नहीं रहा है। – Yuvrajsinh

+0

@prasaddevadiga मैंने अपना जवाब संपादित किया है और इसे आपकी समस्या का समाधान करना चाहिए। – Yuvrajsinh

3

एक और संभावना इस बग से निपटने के लिए प्रोग्राम के रूप में रोटेशन से पहले और रोटेशन पूरा करने के बाद एक नया प्रदर्शित चेतावनी दृश्य खारिज करने के लिए किया जाएगा।

यह स्वचालित रूप से स्क्रीन आकार से स्वतंत्र किसी भी आईओएस डिवाइस के लिए काम करेगा।

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